我正在使用 Win32::API 调用在 DLL 中导出的任意函数,该函数接受 C++ 结构指针。
struct PluginInfo {
int nStructSize;
int nType;
int nVersion;
int nIDCode;
char szName[ 64 ];
char szVendor[ 64 ];
int nCertificate;
int nMinAmiVersion;
};
因为我们需要使用“pack”函数来构造结构并且需要传递一个参数
my $name = " " x 64;
my $vendor = " " x 64;
my $pluginInfo = pack('IIIIC64C64II',0,0,0,0,$name,$vendor,0,0);
它没有正确构建结构。
看来应用于 C 的长度参数会吞噬掉那么多参数。
有人可以建议一种从 Perl 构造此结构并传递到 dll 调用的最佳方法吗?
提前致谢,
纳迦基兰
最佳答案
在模板中使用 Z
(NUL 填充字符串),如下所示
my $pluginInfo = pack('IIIIZ64Z64II',0,0,0,0,$name,$vendor,0,0);
此外,请查看 Win32::API::Struct
,它是 Win32::API 模块的一部分。
关于visual-studio - 将 C++ 结构指针从 Perl 传递到任意 dll 函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1856061/