c++ - 如何在 C++ 中使用来自 dll 的结构?

标签 c++ visual-c++ dll struct

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

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

谢谢...

最佳答案

简答: 您可以使用 GetProcAddress 检索声明为结构的变量的地址。来自 the GetProcAddress man page :

从指定的动态链接库 (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”声明以及您可能需要考虑的其他一些事项以阐明要点,我假设读者已经对手头的主题有了基本的了解。

关于c++ - 如何在 C++ 中使用来自 dll 的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12587197/

相关文章:

c++ - 可变参数模板在以下情况下如何工作?

c++ - 使用文件访问标志和 C++ 的文件输入和输出

visual-c++ - 使用串行设备控制应用程序卷

c - MS VS 2008 中 __declspec(dllimport) 的用法

c++ - 如何在 DirectX 上沿 XYZ 轴旋转对象?

c++ - Boost asio接收指定大小的数据

c++ - 无法弄清楚如何使用 SDL2 正确格式化 Makefile。未定义引用

dll - LoadLibrary() 无法使用 list 和私有(private)程序集加载 DLL

c++ - C++ 中的 DLL 导出和继承

c++ - 共享库中的全局变量如何链接?