2

我有一个给定的 32 位 DLL(dds.dll)和一个头文件(dds.h,C++ 风格)。我确实有来源,但我不想更改它。我在使用 cygwin 的 Windows 上。

我想通过 XS 访问 DLL 中的函数,而不是直接通过 Perl。我是 XS 的新手。

[我不知道如何使用Win32::API. DLL 函数具有结构输入和*struct输入(后者被函数修改),我不知道Win32::API::Struct. 我想这也是一种方法,但我现在已经放弃了。]

我可以在 Perl 和 XS 之间传递整数列表,这样那部分就可以工作了。我的计划是#include "dll.h"在 XS 代码中传入整数的平面列表,将列表转换为 XS 中的结构,将结构和其他参数传递给 DLL 函数,将生成的结构转换为整数的平面列表,然后返回Perl 的列表。

我已将 XSLoader.pm 减少到我需要的最低限度,部分是为了了解发生了什么。它适用于我自己的 XS 生成的 .dll。

我试过以同样的方式加载 dds.dll,但实际上我认为它没有意义。我过去了dl_require_symbolsdl_undef_symbols()也可以。然后dl_find_symbol looks对于某种启动符号并没有找到它。我想 XS 创建了一个引导函数,它使 Perl 通过 可以看到 XS 函数dl_install_xsub(),但是普通的 DLL 没有这个。

无论如何,我不想让 dds.dll 函数在 Perl 中直接可见。我想让 dds.dll 函数对 XS 代码可见。这听起来像一个简单的链接步骤,但我无法弄清楚。

如果有更简单的方法,我也赞成。任何帮助表示赞赏。

4

0 回答 0