【问题标题】:Calling a dll function inside a C++ program在 C++ 程序中调用 dll 函数
【发布时间】:2012-05-12 19:51:53
【问题描述】:

我创建了两个新的 C++ 项目。其中一个是 C++ .dll 项目,另一个是控制台应用程序项目。

对于 dll 程序,下面是简单代码(.cpp 文件):

PIPESTOSPACES_API int npipesToSpaces=0;

PIPESTOSPACES_API int fnpipesToSpaces(void)
{
    return 42;
}

我必须调用这些 dll 函数,我通过从我的 C++ 文件中导出函数以及在我的 C++ 控制台应用程序中的隐式链接来执行此操作。
如果有人能提到如何在 C++ 控制台应用程序中调用这些导出的 .dll 函数的步骤,那就太好了。我参考了this页面学习导出功能等。

编辑: 我目前在 Visual Studio 2010 上使用 Visual C++ 处理所有这些内容。

【问题讨论】:

  • 你用的是什么编译器?海合会?毫秒?
  • @LuchianGrigore 有很多编译器能够生成 DLL。好吧,也许 Gcc 不是其中之一^^。
  • 对于 Visual Studio 的东西,还有另一种选择。如果我没有记错,您可以为 DLL 生成静态库存根,然后将其添加到项目中。很久以前就这样做了。然而 Luchian 的答案是 100% 的最佳解决方案。

标签: c++


【解决方案1】:

如果包含头文件,则可以直接调用函数,因为你知道原型并导入库。

如果没有,您调用LoadLibrary,获取dll 的句柄,然后GetProcAddress 并调用函数作为回调。

【讨论】:

  • 我将生成的 C++ dll 添加到我的控制台应用程序项目中。但是,当我尝试包含标题“Sampledll.h”时,它给了我一个错误:Cannot open include file: 'Sampledll.h': No such file or directory
  • @user1240679 在你的 VS 项目中检查 Sampledll.h 所在的目录是否在包含路径中。
  • @Luchian Grigore:我直接在根路径本身中添加了它。但是,它仍然给出相同的错误。在我关注的帖子中的链接中,那个人也与.lib 链接。这也要做吗?有点迷失在步骤中
  • @user1240679 是的,您必须链接该库,并在项目设置的额外包含目录中包含标头的路径。
  • 您能否举例说明我们应该如何使用 GetProcAddress?
猜你喜欢
  • 2012-01-07
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
相关资源
最近更新 更多