[visual-studio]将从 Perl 的 c + + 结构指针传递给任意 dll 函数调用

标签: Visual-Studio dll
发布时间: 2014/2/28 19:20:11
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我使用 Win32::API 来调用在接受 c + + 结构指针的 DLL 中导出任意函数。

struct PluginInfo {
        int  nStructSize;   
        int  nType;     
        int  nVersion;    
        int  nIDCode;    
        char         szName[ 64 ];  
        char            szVendor[ 64 ];
        int  nCertificate;  
        int  nMinAmiVersion;
};

因为我们需要使用"包"函数来构造结构和需要传递的参数

my $name = " " x 64;
my $vendor = " " x 64;
my $pluginInfo = pack('IIIIC64C64II',0,0,0,0,$name,$vendor,0,0);

其不构建结构正确。
它似乎应用于 C 的长度参数将吞噬那些多个参数。
有些人可以请建议构建这种结构形式 Perl 和帕松到 dll 调用的最佳方法。

感谢在前进
那伽基兰

解决方法 1:

使用 Z (NUL 填充字符串) 在模板中,如下所示

my $pluginInfo = pack('IIIIZ64Z64II',0,0,0,0,$name,$vendor,0,0);

另外,看一看 Win32::API::Struct ,这是 Win32::API 模块的一部分。

赞助商