Perl Win32 :: API()call()函数

时间:2011-02-23 12:34:45

标签: perl

亲爱的, 我试图在我的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?

1 个答案:

答案 0 :(得分:0)

您的代码中存在多个错误。

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

    您正在使用字符串混合数组,并且您不需要针对c ptr的perl引用。 类似于int *。

    1. N代表的数字不长。 L将是未签名的,您需要签名,所以l。
    2.     use Win32::API;
          my $pp = " " x 20;   # alloc a string
          my $xy = 0;          # alloc an int
          my $fun2 = new Win32::API('my.dll','RandomDec','lP','P') or die $^E;  
          $pp = $fun2->Call(4,$xy);
      

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