Perl 脚本
use Win32::API;
use Win32::API::Callback;
my $callback = Win32::API::Callback->new(Perl_Func,"PN", "N");
#Import 'C_Func' Function from dll
my $test = Win32::API->new('dll_test','C_Func','KP','N');
my $buf = pack('i*', (1, 2, 3));
#Calling the C dll Function 'C_Func' with arguments as pointer to 'Perl_Func' and integer array
my $ret = $test->Call( $callback, $buf);
print "final value=".$ret."\n";
定义“Perl_Func”
sub Perl_Func
{
($a,$b)=@_;
print "entered into Perl Function"."\n";
print "int variable from dll=".$b."\n";
print "array first element from dll=".$a[0]."\n"; **#unable to access the value**
$res=$a[0]+$a[1]+$a[2]; **# unable to access the values here**
return $res;
}
C Dll“dll_test”
int __stdcall C_Func( int (*PerlExpFunc)( int *, int ), int *d)
{
int res,c[3];
c[0]=d[0]; c[1]=d[1]; c[2]=d[2];
res=PerlExpFunc(c,10);
return(res);
}
所以这里的输出看起来像这样
输入 Perl 函数 来自 dll=10 的 int 变量 来自 dll 的数组第一个元素 = 最终值=0
所以程序正在进入从 dll 调用的“Perl_Func”。但是在这个函数内部,它无法访问从 dll 作为指针传递的数组中的值(c
在 dll 和$a
'Perl_Func' 中的变量)。因此,没有显示任何值$a[0]
,最终值(即 1,2 和 3 的总和)为零。我想我没有在 Perl 部分正确地从 C 部分传递的指向数组的指针中提取值。请告诉我这样做的正确方法。