【问题标题】:C++ and DLL was not declared in this scopeC++ 和 DLL 未在此范围内声明
【发布时间】:2012-02-01 00:48:12
【问题描述】:

根据我发布的上一个问题并收到了一个很好的答案 -

Dynamically load a function from a DLL

我还有其他问题。我一定是在某个地方出错了,但我很确定我正确构建了 .DLL,并且我确信从之前回答的问题中它已正确链接到 .DLL。

我有以下:

http://pastie.org/3113984

我还使用 DependencyWalker 来确保 .DLL 正在导出我尝试调用的函数,并且它显示它正在正确导出。

PS:我在编译调用 .dll 的程序时收到错误消息,导出函数出现“未在此范围内声明”错误。

感谢您的宝贵时间和帮助!

【问题讨论】:

  • 提出问题时,请发布演示问题所需的最少代码量,以及任何相关的编译器错误。

标签: c++ dll


【解决方案1】:

答案很明确。而不是写:

int a = Isworking();

你应该写:

int a = funci();

Isworking 是 DLL 中函数的名称,但您导入的函数指针称为 funci

【讨论】:

  • 很可能这真的是问题所在。
  • 这和你的评论是大卫的问题,我犯了一个愚蠢的错误。我也不知道为什么它被否决了。来自我的 +1
【解决方案2】:

也许不能直接解决您的问题(因为您使用的是 win32),但 Poco 库提供了一种非常干净且易于使用的方法来从共享库(包括 DLL)加载符号。所以你可以尝试使用 Poco。

见:http://pocoproject.org/slides/120-SharedLibraries.pdf

【讨论】:

  • 打电话给LoadLibraryGetProcAddress 有什么难的?这不是火箭科学!
  • 感谢您的建议,我实际上正在研究 .dll 的等效项,所以呢?也可以在 Unix 中运行,Poco 是一种跨平台的 .dll 链接器?同一个函数和方法可以分别调用一个.dll和.so吗?
  • 我同意大卫的观点。不难,直接使用这些函数肯定有更好的学习效果。
  • @DavidHeffernan:如果你正在加载rocket32.dll,可能是这样。
  • @DavidHeffernan:我从来没有说过它的火箭科学。我个人更喜欢 Poco,因为它对我来说更方便。 Poco 代码甚至是可移植的(win32 肯定不行)。
猜你喜欢
  • 2010-12-17
  • 1970-01-01
  • 2021-07-17
  • 2015-08-21
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多