perl脚本在调用win32 dll时崩溃

时间:2013-07-12 03:16:19

标签: perl winapi perl-module activeperl

我有一个使用_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进行线程化实现吗?

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的Win32 :: API? $ param1,$ param2,$ param3,$ param4,$ param5的内容是什么?您正在使用的真实DLL和实际函数调用是什么?该C函数的文档是什么?

我认为你正在为char * s传递NULL,或者你正在搞乱原型。或者你的C函数不是重新输入/线程安全的。