我可以使用LoadLibrary方法导入struct类型的数据吗? 对不起我的英语。 感谢。
答案 0 :(得分:8)
让我假设一些问题遗漏的内容:
bool GetFlubber(Flubber* flubber)
。Flubber
(恰好是struct
!)在名为 flubber.h 的头文件中声明。如果符合这三个条件,那么您可以在 flubber.dll 上使用LoadLibrary
,然后在GetProcAddress
上使用GetFlubber
作为proc名称,最后您可以在本地声明Flubber
实例,并通过检索到的proc地址将其传递给GetFlubber
。
答案 1 :(得分:3)
您的意思是将数据放入dll中,并使用LoadLibrary和Getprocaddres来获取指向数据的指针吗?这是可能的,尽管将函数放在dll中更常见,并让它们返回指向数据的指针。
答案 2 :(得分:2)
在C ++中,结构声明就是声明。它不会生成您可以在运行时加载的内容,它是一个纯粹的编译时构造,它只是告诉编译器内存中的内容,涉及的字段,类型和顺序等等。
答案 3 :(得分:1)
我假设你使用的是VC ++ 2005。
MS现在为您提供Delay Loading Dll's。
Visual C ++链接器现在支持DLL的延迟加载。 使您无法使用Windows SDK函数 LoadLibrary 和GetProcAddress来实现DLL延迟加载。
要设置延迟加载的步骤。
转到Project-> Properties-> Linker->输入然后在'Delay Loaded DLLs'中指定你的Dll
答案 4 :(得分:0)
正如其他回复所暗示的那样,很难说出这里有什么问题,但我会对这个问题的另一种解释作出回应。我不确定它是否“官方支持”,但您可以让DLL导出一个全局变量,然后通过GetProcAddress动态访问它。
例如,如果名为foo.dll的库包含名为g_MyGlobal的FOO类型的全局,则它可以在foo.def中导出该变量。然后客户端代码可以调用:
MyPointer = GetProcAddress(..., "g_MyGlobal");
并获得指向全局的“FOO *”指针。
...但话虽如此,如果你发现自己需要为私人测试之外的其他事情做这件事,你可能想重新考虑你的设计。将这个全局隐藏在DLL中的导出函数后面可能会更加安全和清晰。