5

我有一个第三方 dll,没有可在我的 c++ 应用程序中使用的 lib 或头文件。这就是我使用 LoadLibrary(_T("xxx.dll")) 加载它的原因。我可以使用 GetProcAddress() 函数来实现它的功能。

这个 dll 中有一个结构,我也必须访问它。我应该怎么做才能到达和使用它?我查看了该站点,但只找到了 c# 而不是 c++ 的示例。在 C++ 中这样做的方法是什么?

谢谢...

4

2 回答 2

2

简短回答:您可以使用 GetProcAddress 检索声明为结构的变量的地址。从GetProcAddress 手册页

从指定的动态链接库 (DLL) 中检索导出函数或变量的地址。

该函数的名称应该是 GetSymAddress 而不是 GetProcAddress,但我离题了。

长答案:

假设 DLL 包含 struct Foo 类型的符号实例

typedef struct { int x; int array[100]; } Foo;
__declspec( dllexport )  struct Foo Bar = 
{
0xdeadbeef,{0}
};

可以检索变量Bar的地址,前提是您已经加载了 dll 并在某处使用了它的 hModule 句柄:

struct Foo* Bar = GetProcAddress(hModule,"Bar");

无法检索结构本身的定义,但无论如何我认为这不是您的意思。

注意:我忽略了名称修饰、extern "C" 声明以及可能需要考虑的其他一些事情以明确这一点,我假设读者已经对手头的主题有基本的了解。

于 2016-09-07T17:39:31.953 回答
1

如果您知道结构的语法,例如来自 C# 定义,那么您可以简单地将其定义添加到 .h 文件中,将其包含在您的 C++ 源文件中并使用它。就这样。但是如果您的结构是某种类并且具有成员方法,那么您应该知道成员方法的修饰名称,从 .dll 动态加载它们并将它们作为 C 函数调用。

于 2012-09-25T16:37:17.620 回答