我有一个没有lib或头文件的第三方dll可以在我的c ++应用程序中使用。这就是我使用LoadLibrary(_T(“xxx.dll”))来加载它的原因。我可以使用GetProcAddress()函数来实现它的功能。
这个dll中有一个结构,我也必须触及它。我该怎么做才能到达并使用它?我查看了网站,但发现了c#not c ++的例子。在c ++中这样做的方法是什么?
...谢谢
答案 0 :(得分:1)
如果您知道结构的语法,例如从C#定义,那么您只需将其定义添加到.h文件中,将其包含在C ++源文件中并使用它。就这样。 但是如果你的结构是某种类并且有成员方法,那么你应该知道成员方法的修饰名称,动态地从.dll加载它们并将它们称为C函数。
答案 1 :(得分:0)
简答: 您可以使用GetProcAddress来检索声明为struct的变量的地址。来自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");
你无法检索结构本身的定义,但我不认为这就是你的意思。
注意:我忽略了名称修改,外部“C”声明以及可能需要考虑的其他一些事项以明确说明,我假设读者已经掌握了手头的主题。