Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> crossover, подключение функции на перле к С++ проге 
:(
    Опции темы
cybear
Дата 9.12.2004, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.11.2004
Где: Tallinn, Estonia

Репутация: нет
Всего: нет



Собственно сабж

Есть прога на С++, она должна обращаться к функции написанной перле - как это лучше сделать? брать неофициальный перл2ехе и просто вызывать ехе ооооооочень ресурсоёмко, а желательно это как раз с мин потерей времени делать.
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 9.12.2004, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Я не знаю как с C++, но в C можно встроить сам Perl, так как Perl интерпритатор так же написан на C.
Допутим есть такая программа на Perl:
Код

#!/usr/bin/perl
use strict;
print "Hello, world!";
# Нас интересует следующая подпрограмма
sub showtime {
      print time;
}

Мы хотим из C программы вызвать подпрограмму showtime. теперь на C пишем такой код:
Код

#include <EXTERN.h>
#include <perl.h>

static PerlInterpreter *my_perl;

int main(int argc, char **argv, char **env)
{
     char *args[] = { NULL };
     my_perl  = perl_alloc();
     perl_construct(my_perl);
     perl_parse(my_perl, NULL, argc, argv, NULL);
     call_argv("showtime", G_DISCARD | G_NOARGS, args);
     perl_destruct(my_perl);
     perl_free(my_perl);
}

Сейчас сына положу спать и пороюсь ещё в доках. Помоему, можно транслировать Perl программу в программу на C. ( XS )

Удачи.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 10.12.2004, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Вобщем, вот с чем тебе не мешало бы ознакомиться, для того что бы встроить Perl в программу на C, кстати там, помоему, описано и о C++. Думаю, большой разницы не будет:
perldoc ExtUtils::Embed
perldoc perlcall
Для использования функций из внешней библиотеки C:
perldoc perlxstut

Удачи.

Это сообщение отредактировал(а) korob2001 - 10.12.2004, 00:59


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
chaos
Дата 10.12.2004, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Советую почитать про XSUB
PM WWW   Вверх
chaos
Дата 10.12.2004, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Цитата(chaos @ 10.12.2004, 13:57)
Советую почитать про XSUB

вот тебе пример(Передача аргументов подпрограмму)
Код

sub LeftString
{
 my ($s,$n) = @_;
 print substr($s,0,$n), "\n";
}


Функция на С каторая вызывает LeftString
Код

static void call_LeftString(a,b)
{
 char *a;
 int b;
 dSP;
 PUSHMARK(sp);
 XPUSHs(sv_2mortal(newSVpv(a,0)));
 XPUSHs(sv_2mortal(newSViv(b)));
 PUTBACK:

 perl_call_pv("LeftString",G_DISCARD);
}


Пример вызов без параметров
Код

sub pUID
{
 print "UID = $<\n";
}


Код

static void call_pUID()
{
 dSP;
 PUSHMARK(sp);
 perl_call_pv("pUID",G_DISCARD|G_NOARGS);
}


Извени прокоментировать не могу тк опаздываю, в другой раз

Это сообщение отредактировал(а) chaos - 10.12.2004, 16:04
PM WWW   Вверх
Kefir
Дата 11.12.2004, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: нет
Всего: 87



chaos, а как связан код на перле и на С? т.е. я не вижу никаких ссылок в коде С на файл с кодом перла...
PM MAIL WWW Skype   Вверх
cybear
Дата 11.12.2004, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.11.2004
Где: Tallinn, Estonia

Репутация: нет
Всего: нет



Всем спасибо, будем пробовать. Хотя конечно это не так просто когда один человек знает только С++, а другой - только перл ;(

Kefir я так понял что связь идёт через библиотеки EXTERN.h и perl.h - последняя вроде как должна работать как интерпретатор перла.
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 11.12.2004, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Если до понедельника не разберёшься, дай знать, будем разбираться вместе. Просто эту неделю я с сыном и времени не хватает, а вот на следующей неделе сын будет у мамы.
Думаю разберёмся.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
chaos
Дата 13.12.2004, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Цитата(Kefir @ 11.12.2004, 10:05)
chaos, а как связан код на перле и на С? т.е. я не вижу никаких ссылок в коде С на файл с кодом перла...

выполни h2xs -A -n Test
думая станет яснее

PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.