2014-07-16 1 views
1

Я пытаюсь импортировать C++ DLL в Perl (Active Perl 5.12.2 Build 1202). Моя подпрограмма для этого:Не удалось обнаружить путь DLL в Win32 :: API

sub _import 
    { 
     my ($func,$params)[email protected]_; 
     print "DLL Pass value: $func $params \n"; 
     my $retVal= new Win32::API($MY_DLL,$func,$params,'I'); 
     croak("Failed to import $func from $MY_DLL \n") if(!$retVal); 
     return $retVal; 
    } 

Я добавил use Win32::API; и я определил use constant MY_DLL => 'D:\MyData\MYDLL_CON'; # name of the dll

Что я получаю, когда я называю _import("Init",'P'); (функция «Init», которая принимает указатель), печать командной строки:

DLL Pass value: Init P Failed to import Init from

Обратите внимание, что есть в < Space> после "от". DLL существует на пути, но все же это функция WIN32: API рассматривает это как пустое! Такой же скрипт perl работает на определенной машине и не работает (дает выше ошибку) на определенной машине. Все машины имеют одинаковую конфигурацию плюс одну и ту же версию Perl и все такое. Но он находит DLL на нескольких машинах и не отдыхает!

Dependency Walker не обнаруживает ошибок в зависимости от DLL.

Я не знаю, что происходит!

+0

Что такое MY_DLL и как SOFTING_DLL связан с кодом, который вы опубликовали? Почему имя dll не содержит расширение? –

+0

@AlexFarber Я забыл обновить имя переменной при публикации отредактированного кода ... «MY_DLL» и «SOFTING_DLL» теперь исправлены ... И добавление расширения не вносило никаких изменений! – Swanand

+0

Это может помочь, если вы проверили, какую ошибку вы получили ... – ikegami

ответ

0

$MY_DLL не то же самое, что MY_DLL. Избавьтесь от $.

+0

Без изменений! Только сейчас он печатает «MY_DLL», как обычный текст! – Swanand

+0

И почему вы думаете, что это ... – ikegami

+0

Без '$' это простой текст/String ... Я имел в виду, что даже без '$' MY_DLL не загружается! – Swanand

 Смежные вопросы

  • Нет связанных вопросов^_^