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

3
我的主要问题是,我能够使用VC++编写C++ dll。现在dll位于Debug文件夹中。
如何在其他C++控制台应用程序中使用我的DLL?如何添加引用或链接DLL到应用程序中。
另一点,在创建DLL时,VC++向导会给我三个选项:
1. 空的DLL项目 2. 简单的DLL项目 3. 导出某些符号的DLL
根据CP的文章,我选择了第三个选项。(由于DLL被MFC应用程序使用,所以有些难以理解)
我需要始终选择第三个选项吗?其他两个选项的含义是什么?
4个回答

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文件。

3
您可以使用“导出某些符号的DLL”来学习如何构建Dll项目。一旦您理解了这个,就可以使用“简单的DLL项目”。您可以始终首选“导出某些符号的DLL”,并更改由向导生成的代码,将示例导出的类/函数/符号替换为自己的代码。
要从客户端项目引用.Dll项目,请将.lib文件添加到客户端项目链接器依赖项中:项目 - 属性 - 链接器 - 输入 - 附加依赖项。为确保链接器可以找到.lib文件,请将.lib文件所在的目录添加到链接器目录列表中。这可以在客户端项目中本地完成(项目 - 属性 - 链接器 - 常规 - 附加库目录),也可以全局适用于所有VC ++项目(工具 - 选项 - VC ++目录 - 库)。
最后一件事是确保DLL可以在运行时由客户端.exe加载。DLL必须位于当前目录、可执行目录、Windows、系统目录或通过PATH变量可用。

2

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


1

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

在这些说明中,新项目被添加到包含DLL的同一解决方案中。但在大多数情况下可能不是这种情况。如果您有两个单独的项目需要处理,则可以按如下稍作修改上述过程。

  1. 在DLL项目中,确保已经配置创建了一个DLL文件。要做到这一点,请单击解决方案资源管理器中的项目,然后转到属性。在“配置属性”>>“常规”下,将“配置类型”更改为“动态库(.dll)”。现在,在菜单栏上选择构建、构建解决方案来编译动态链接库。

  2. 按照链接中所述,创建其他项目和文件。要在应用程序中使用dll,您必须引用它。为此,请添加从动态库创建的lib文件。lib文件与dll位于同一文件夹中。如果使用Visual Studio处于调试模式,则位于Project>>Folder>>Debug中。如果使用了发布模式,则位于Project Folder>>Release中。要在应用程序中使用lib文件,请转到“项目”>>“属性”>>“链接器”>>“输入”>>“附加依赖项”,并将lib文件的名称添加到列表中(在我的情况下是“AFR24x7.lib”)。

  3. 为了确保链接器能够找到.lib文件,将包含.lib文件的目录添加到链接器目录列表中。有两个地方可以这样做:在客户端项目中本地进行(Project>>Properties>>Linker>>General>>Additional library directories),以及全局为所有VC++项目进行(Tools>>Options>>VC++ Directories>>Libraries)。

  4. 按照链接中提到的添加include文件。

  5. 将创建的DLL文件复制并粘贴到应用程序的发布和调试文件夹中(如果您都在使用它们)。

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

希望这可以帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接