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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с подключением своей dll 
:(
    Опции темы
Sashenka_kpi
Дата 31.5.2007, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 14.5.2007

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



Ситуация:
есть своя длл-ка, написання на Delphi.
Пытаюсь подключить ее таким скриптом
Код


#!/usr/bin/perl -w
use Win32::API;
$function = Win32::API ->Import(
'D:\mylibs\f.dll', 'int s(int a, int b)',
);
$re = s(5,4);


Получаю следующую ошибку:
Substitution replacement not terminated at  line 6.
Буду благодарна за любую идею
PM MAIL   Вверх
amg
Дата 31.5.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Дело явно в строке 
Код
$re = s(5,4);
. Перл пытается присвоить переменной результат работы регулярного выражения с заменой, но у этого рег. выражения незаконченный синтаксис.
Думаю, ругаться перестанет, если написать 
Код
$re = s(5,4)(5,7);
 А если s - какая-то своя функция, то не стоит запутывать перл и сказать прямо: 
Код
$re = &s(5,4);

PM MAIL   Вверх
Sashenka_kpi
Дата 31.5.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 14.5.2007

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



Спасибо. Помогло, но не надолго, теперь все виснет 
Deep recursion on subroutine "Win32::API::AUTOLOAD" at c:/Perl/site/lib/Win32/AP
I.pm line 30.
PM MAIL   Вверх
amg
Дата 31.5.2007, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Может, попробовать другой вызов?
Код

use Win32::API;
$function = Win32::API->new('D:\mylibs\f.dll', 'int s(int a, int b)');  
$re = $function->Call(5, 4);

PM MAIL   Вверх
Sashenka_kpi
Дата 31.5.2007, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 14.5.2007

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



Пробую. Получаю ошибку 
Can't call method "Call" on an undefined value at line 3
PM MAIL   Вверх
nitr
Дата 31.5.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

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



а должен smile если верить доку smile
Цитата

CALLING AN IMPORTED FUNCTION

To effectively make a call to an imported function you must use the Call() method on the Win32::API object you created. Continuing with the example from the previous paragraph, the GetTempPath() API can be called using the method:
    $GetTempPath->Call(...

Of course, parameters have to be passed as defined in the import phase. In particular, if the number of parameters does not match (in the example, if GetTempPath() is called with more or less than two parameters), Perl will croak an error message and die.


Добавлено через 1 минуту и 57 секунд
Sashenka_kpi, твоя ошибка как-то не стыкуется с этим, пишет, будто такого метода нет...
может стоит проверку сделать:
примерно так:
Код

#!/usr/bin/perl -w
use Win32::API;
my $function = Win32::API ->Import('D:\mylibs\f.dll', 'int s(int a, int b)',);
die "Cant't load module :( !!!" unless defined $function;
my $re = s(5,4);


Добавлено через 3 минуты и 24 секунды
если выдаст наше сообщение (Cant't load module :( !!!) , то Перл воообще не смог подгрузить smile
доку (или скачать новую версию) прям тут smile


--------------------
PM   Вверх
Sashenka_kpi
Дата 1.6.2007, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 14.5.2007

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



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


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

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


 




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


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

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