-1

我有一个使用 _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 多线程实现中调用这个“call_dll”函数时,脚本每次都会崩溃。

我在 Windows7 上使用活动 perl 5.16

这次崩溃的原因是什么?我们不能将 win32::api 用于线程实现吗?

4

1 回答 1

1

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

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

于 2013-07-12T12:55:50.763 回答