visual如何在c++中使用dll中的结构

visual How to use structs from a dll in c++?

本文关键字:dll 结构 visual c++      更新时间:2023-10-16

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

这个dll中有一个结构,我也必须访问它。我该怎么做才能够到并使用它?我浏览了一下这个网站,但只找到了c#而不是c++的例子。在c++中这样做的方法是什么?

谢谢。。。

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

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

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

答案很长:

假设DLL包含类型为structFoo:的符号实例

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

可以检索变量Bar的地址,前提是您已经加载了dll,并且其hModule句柄位于以下位置:

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

您不能检索结构本身的定义,但我认为这不是您的意思。

注意:我忽略了名称篡改、外部"C"声明,也许还有其他一些你需要考虑的事情,我想读者已经对手头的主题有了基本的了解。

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