我正在尝试将 3 个指针传递给 DLL 函数。我有:
{ $代码=1; $len=100; $str=" " x $len; $function = new Win32::API(DLLNAME,'dllfunction','PPP','V'); $function->Call($code,$str,$len); }
DLL 定义为void dllfunction(int* a, char* str, int* len);
DLL 将修改三个指针所指向的所有变量。
但是,当我运行它时,我会出现段错误。Win32::API的文档指定我应该使用实际变量名而不是 Perl 变量引用。谁能告诉我我错过了什么?谢谢。
*更多信息:
我printf()
在DLL中添加了打印出三个指针的地址,并printf
在Perl中打印出三个变量的引用。我得到以下信息
DLL:代码 = 0x10107458 错误 = 0x10046b50 str = 0x10107460
Perl:代码 = 0x101311b8 错误 = 0x101312a8 str = 0x10131230
知道为什么 DLL 得到错误的地址吗?
****更多信息
经过多次调试,我发现从 DLL 函数返回时会发生这种情况。我添加了 printf("done\n"); 作为这个 DLL 函数的最后一行,它确实输出,然后程序段错误。我猜它发生在 Win32::API 中?有没有人经历过这个?
此外,我可以从 DLL 访问所有三个变量的初始变量。所以指针是正确传递的,但由于某种原因,它在从 DLL 返回时会导致段错误。尝试将新数据复制到 Perl 变量中时可能会出现段错误?