亲爱的, 我试图在我的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?
答案 0 :(得分:0)
您的代码中存在多个错误。
my @lpBuffer = " " x 20; my $pp= \@lpBuffer;
=> my $pp = " " x 20;
您正在使用字符串混合数组,并且您不需要针对c ptr的perl引用。 类似于int *。
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。