我有一个使用_cdecl调用约定构建的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进行线程化实现吗?
答案 0 :(得分:1)
您使用的是哪个版本的Win32 :: API? $ param1,$ param2,$ param3,$ param4,$ param5的内容是什么?您正在使用的真实DLL和实际函数调用是什么?该C函数的文档是什么?
我认为你正在为char * s传递NULL,或者你正在搞乱原型。或者你的C函数不是重新输入/线程安全的。