【问题标题】:Perl Win32::API() call() functionPerl Win32::API() call() 函数
【发布时间】:2011-02-28 04:19:11
【问题描述】:

亲爱的, 我试图在我的 dll 的 call() 函数的返回中获取 char 指针或字符串的值。 我的 dll 有一个函数 RandomDec(long , int*) 并返回一个字符串。那么我将使用 Win32::API() 调用什么。我已经尝试过了,但没有成功。请帮忙

use Win32::API;  
my @lpBuffer = " " x 20;   
my $pp= \@lpBuffer;  
my $xy=0;  
my $ff= \$xy;  
my $fun2 = new Win32::API('my.dll','RandomDec','NP','**P**')or die $^E;  
$pp = $fun2->Call(4,$ff);  

如何使用 $pp ?

【问题讨论】:

    标签: perl


    【解决方案1】:

    您的代码中有多个错误。

    1. my @lpBuffer = " " x 20; my $pp= \@lpBuffer;

    =>my $pp = " " x 20;

    您将数组与字符串混合在一起,并且 c ptr 不需要 perl ref。 与 int* 类似。

    1. N 代表不长的数字。 L 将是未签名的,您需要签名,所以 l。
    使用 Win32::API; 我的 $pp = " " x 20; # 分配一个字符串 我的 $xy = 0; # 分配一个整数 我的 $fun2 = new Win32::API('my.dll','RandomDec','lP','P') 或死 $^E; $pp = $fun2->调用(4,$xy);

    我没有检查 Win32::API 是否可以对 char* 进行左值赋值。通常不会,所以 $pp 将是调用后指向某个字符串的外部指针,而 prev. $pp 的 PV 插槽将丢失,并且无法从 perl 访问。 使用 FFI 和 WinAPI,您通常也返回 int,而不是字符串。 仅通过副作用的字符串,作为函数 arg。

    【讨论】:

    • 非常感谢!但是如何从 dll 函数中获取字符串作为返回类型。请帮我。我找不到任何解决方案。
    • 你必须先知道如何创建你的字符串。你在perl还是你的DLL?你从 dll 中取回一个指针,这就是字符串。在我的固定示例中,$pp 是 perl 分配的字符串,并且可能由您的 dll 更改。
    猜你喜欢
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2012-03-27
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 2012-11-24
    相关资源
    最近更新 更多