2013-07-12 64 views
-1

我有使用_cdecl其中出口一個功能調用約定一個Win32 DLL建: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); 

.... 
} 

這個調用工作正常,我成功地獲得了返回值。

現在,當我試圖在perl mutithreaded實現中調用此「call_dll」函數時,腳本每次崩潰。

我使用的Windows7上

活躍的Perl 5.16是一個什麼這個崩潰的原因?我們不能使用win32 :: api進行線程實現嗎?

+1

發生了什麼樣的事故?是否有錯誤訊息?你的參數是什麼?我們需要更多信息。 – simbabque

回答

1

您使用的是什麼版本的Win32 :: API? $ param1,$ param2,$ param3,$ param4,$ param5的內容是什麼?什麼是你正在使用的真正的DLL和真正的函數調用,以及那個C函數的文檔是什麼?

我認爲你傳遞NULL *爲char *,或者你搞亂了原型。或者你的C函數不是reenterant /線程安全的。