2013-07-12 3 views
-1

У меня есть длл win32 построен с использованием _cdecl соглашение о вызовах, которые экспортируемого одну функцию:Perl скрипт грохот при вызове win32 DLL

extern __declspec(dllexport) char* myfunc(char* param1, char* param2, char* param3, int param4, int param5) 

Я вызываю эту функцию из PERL скрипт так:

sub call_dll { 
..... 
.... 

my $api = Win32::API->new('my.dll', 'myfunc', 'PPPII', 'P', '_cdecl'); 
my $return = $api->Call($param1, $param2, $param3, $param4, $param5); 

.... 
} 

Этот вызов работает нормально, и я успешно получаю возвращаемое значение.

Теперь, когда я пытаюсь вызвать эту функцию «call_dll» в реализации perl mutithreaded, скрипт сбрасывается каждый раз.

Я использую активный Perl 5.16 на Windows7

Что может быть причиной этой аварии? Разве мы не можем использовать win32 :: api для потоковой реализации?

+1

Какая авария происходит? Есть ли сообщение об ошибке? Каковы ваши параметры? Нам нужно немного больше информации, пожалуйста. – simbabque

ответ

1

Какую версию Win32 :: API вы используете? каковы содержимое $ param1, $ param2, $ param3, $ param4, $ param5? Каков реальный вызов DLL и реальной функции, который вы используете, и какие документы для этой функции C?

Я думаю, что вы передаете NULL для char * s, или вы испортили прототип. Или ваша функция C не является защитой от повторного использования/потоком.