私は、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 を使用できませんか?