【发布时间】:2008-12-09 20:06:45
【问题描述】:
我正在尝试将 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 变量引用。谁能告诉我我错过了什么?谢谢。
*更多信息:
我在DLL中添加printf()打印出三个指针的地址,在Perl中添加printf打印出三个变量的引用。我得到以下内容
DLL:代码 = 0x10107458 错误 = 0x10046b50 str = 0x10107460
Perl:代码 = 0x101311b8 错误 = 0x101312a8 str = 0x10131230
知道为什么 DLL 得到错误的地址吗?
****更多信息
经过多次调试,我发现这是从DLL函数返回时发生的。我添加了 printf("done\n");作为这个 DLL 函数的最后一行,它确实输出,然后程序段错误。我猜它发生在 Win32::API 中?有人经历过吗?
另外,我可以从 DLL 访问所有三个变量的初始变量。所以指针是正确传递的,但由于某种原因,它在从 DLL 返回时会导致段错误。尝试将新数据复制到 Perl 变量时可能出现段错误?
【问题讨论】:
-
您可能希望更改其中一个标签以反映这也是一个与 Perl 相关的问题。