如何从另一个C ++ win32控制台应用程序调用C ++ Win32 DLL

时间:2010-08-26 07:25:05

标签: c++ windows visual-c++ dllimport dllexport

我主要关注的是,我能够使用VC ++编写C ++ DLL。现在,dll出现在Debug文件夹中。

如何在其他C ++控制台应用程序中使用我的DLL。如何添加引用或将DLL链接到应用程序。

另一点,在创建DLL时,VC ++向导为我提供了以下选项:

  1. 空DLL项目
  2. 一个简单的DLL项目
  3. 导出某些符号的DLL
  4. 现在根据CP的文章,我使用了第3个选项。 (由于MFC应用程序使用了dll,因此无法跟进,有些在这个时间点有点先进

    我是否需要始终选择第三种选择?另外两个选项意味着什么?

4 个答案:

答案 0 :(得分:6)

不完全确定您的问题但是:

使用它的选项并不重要,只是向导为你做的事情;如果您使用第三个选项,则向导会在您的头文件中创建一个如下所示的位:

#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif

这种方法的工作原理是在DLL项目中,TEST_EXPORTS在编译器选项中定义,因此TEST_API计算为dllexport,从而告诉链接器导出这些符号。如果在另一个项目中包含此标头,则将TEST_API定义为dllimport,它告诉编译器在DLL中的运行时链接到它。这种导出符号的#define方法被广泛使用并且易于阅读。

为了在DLL中调用函数/类,您需要以下两种方式之一导出符号: a)使用__declspec(dllexport)[这似乎在几乎所有情况下都是更方便的选项] OR b)在项目中使用.DEF文件

还想提一下,您需要在解决方案中包含.exe文件的DLL项目或DLL编译生成的.lib。

答案 1 :(得分:3)

您可以使用“导出某些符号的DLL”来了解如何构建Dll项目。理解了这一点后,请使用“A Simple DLL project”。您可以选择始终使用“导出某些符号的DLL”,并更改向导生成的代码,将示例导出的类/函数/符号替换为您自己的代码。

要从客户端项目引用.Dll项目,请将.lib文件添加到客户端项目链接器依赖项:项目 - 属性 - 链接器 - 输入 - 附加依赖项。要确保链接器可以找到.lib文件,请将放置.lib文件的目录添加到链接器目录列表中。有两个地方可以完成:客户端项目中的本地项目(项目 - 属性 - 链接器 - 常规 - 附加库目录)和全局,适用于所有VC ++项目(工具 - 选项 - VC ++目录 - 库)。

最后一件事是确保客户端.exe可以在运行时加载DLL。 Dll必须位于当前目录,可执行目录,Windows,系统目录中,或通过PATH变量提供。

答案 2 :(得分:2)

可以通过在Alex Studio中描述的Visual Studio中控制台应用程序的项目设置中将其指定为依赖项来导入DLL。您必须通过将DLL放在指定PATH变量的任何位置来确保应用程序能够找到DLL。 您还可以使用LoadLibrary方法在您的应用程序中以编程方式加载DLL(请参阅此处的文档http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx),并使用函数GetProcAddress调用DLL中导出的方法(请参阅http://msdn.microsoft.com/en-us/library/ms683212(VS.85).aspx)。

答案 3 :(得分:1)

完成以下步骤以设置两个项目。     http://msdn.microsoft.com/en-us/library/ms235636.aspx

在这些说明中,新项目将添加到同一解决方案中     包含DLL。在大多数情况下可能不是这种情况     的情况。如果您有两个单独的项目     处理,略微改变上述程序如下。

  1. 在DLL项目中,确保已配置为创建DLL 文件。为此,请单击解决方案资源管理器中的项目 去物业。在配置属性>>下一般,改变 配置类型为“动态库(.dll)”。现在,编译 通过在菜单上选择Build,Build Solution来动态链接库 杆

  2. 创建链接中提到的其他项目和文件。至 在应用程序中使用dll,您必须引用它。为此,请添加 从动态库创建的lib文件。 lib文件已创建 在与dll相同的文件夹中。如果使用Visual Studio 调试模式,它将在Project>> Folder>> Debug中。如果是发布模式 使用,项目文件夹>>发布。要在应用程序中使用lib文件,请转到 项目>>属性>>链接器>>输入>>额外的依赖关系 并将lib文件的名称添加到列表中(我的“AFR24x7.lib”) 情况)。

  3. 要确保链接器可以找到.lib文件,请将目录添加到其中 将.lib文件放置到链接器目录列表中。那里有两个 这可以完成:在客户端项目中本地(项目>>属性>>链接器>>常规>>其他库目录)和 全局,适用于所有VC ++项目(工具>>选项>> VC ++目录>>库)。

  4. 添加链接中提到的包含文件。

  5. 复制创建的DLL文件并将其粘贴到应用程序的发行版中 调试文件夹(如果您同时使用它们)。

  6. 完成除设置依赖项之外的其他步骤 在链接中给出。

  7. 希望这会有所帮助。