在C ++上使用带有LoadLibrary()方法的库dll

时间:2008-12-03 09:54:12

标签: c++ winapi

我可以使用LoadLibrary方法导入struct类型的数据吗? 对不起我的英语。 感谢。

5 个答案:

答案 0 :(得分:8)

让我假设一些问题遗漏的内容:

  1. 您有一个名为 flubber.dll
  2. 的动态库
  3. 该库导出函数bool GetFlubber(Flubber* flubber)
  4. 函数和类型Flubber(恰好是struct!)在名为 flubber.h 的头文件中声明。
  5. 如果符合这三个条件,那么您可以在 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中的导出函数后面可能会更加安全和清晰。