gpt4 book ai didi

windows - 如何使用 Win32::API 调用 Win32 DLL void** 参数?

转载 作者:可可西里 更新时间:2023-11-01 10:30:41 26 4
gpt4 key购买 nike

我有一个要从 Perl 调用的 Windows DLL。导出函数的原型(prototype)是:

int __stdcall func(const char*, int, int, int, double, double, void**);

最后一个参数返回指向函数中分配的对象的指针。

perl 代码 –

my $dll_path = "../stage/test_dll.dll";

my $dll_func = new Win32::API($dll_path,
'func',
'PIIIDDP', 'I');

my $data = "test something here";
my $pResult = 0;

my $rc = $ dll_func ->Call($data, 0, 0, 9, 0.6, 0.3, $pResult);

弹出一条错误消息,说无法写入内存。也许我不能用P来代表void**?我通读了所有文档,但找不到一个使用 void** 参数的示例。帮助!

最佳答案

P 参数关联的变量必须是预分配的 string 变量,而不是整数。尝试类似的东西:

my $pResult = "\0" x 8;   # Just in case we're 64-bit

my $rc = $ dll_func ->Call($data, 0, 0, 9, 0.6, 0.3, $pResult);

$pResult 将包含指向该对象的指针。您可能需要使用 unpack 来提取它。

你没有说你需要用这个对象做什么。如果您需要将其作为 void* 传递给其他 DLL 函数,您可能需要将其解压为 long 并使用 N而不是参数列表中的 P

关于windows - 如何使用 Win32::API 调用 Win32 DLL void** 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1399620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com