visual-studio - 将 C++ 结构指针从 Perl 传递到任意 dll 函数调用

标签 visual-studio perl dll pointers dllexport

我正在使用 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/

相关文章:

c++ - Visual Studio 2010 无法启动程序 .dll

linq - 如何强制 sqlmetal 保持字段名称大小写?

c# - 将 xUnit.NET ASP.NET MVC 单元测试添加到现有项目/解决方案

visual-studio - VS2012 - VS2013 - VS2015 - VS2017 - VS2019 的 Crystal 报表

regex - 交换值

windows - Windows Dll 可以在 Windows Phone 上运行吗?

c# - 枚举参数在 Visual Studio Asp.Net MVC 中传递不正确的值

html - Perl 模块 HTML::Template 可以使用 <TMPL_VAR NAME=...> 之外的其他语法吗?

regex - 如何在 Perl 中将正则表达式模式定义为常量?

c++ - 如何在运行时将 C++ 程序编译并链接到 DLL