Я пытаюсь импортировать 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.
Я не знаю, что происходит!
Что такое MY_DLL и как SOFTING_DLL связан с кодом, который вы опубликовали? Почему имя dll не содержит расширение? –
@AlexFarber Я забыл обновить имя переменной при публикации отредактированного кода ... «MY_DLL» и «SOFTING_DLL» теперь исправлены ... И добавление расширения не вносило никаких изменений! – Swanand
Это может помочь, если вы проверили, какую ошибку вы получили ... – ikegami