这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人Blog在C++中调用DLL中的函数(1)(2)(3)

但是问题出现了,上面讲述的步骤很详细但是在自己运行的时候却会出现错误,于是今天在使用google“vs2012 c++调用dll”时,发现了一篇MSDN上的指南:http://msdn.microsoft.com/zh-cn/library/ms235636.aspx

 在这篇指南和之前3篇文章的综合指引下,笔者完成了在VS2012中编写DLL并成功调用DLL的例程,下面将这个过程一步一步详细描述出来:

1、首先,打开VS2012 ,在菜单栏中依次选择:FILE-->NEW-->Project;

2、在 “新建项目”对话框左边窗格中,展开“Installed”-->Templates-->VisualC++ -->Win32”从右侧窗格中选择“Win32 Console Application”(有blog说到Win32Project也可以,笔者未尝试)。

3、在下方窗格“Name”中填写AddDLL(工程名称),“Location”中选择工程的生成目录,Solution中 为“Create new solution”,“Solution name”中填写建立的解决方案的名称“AddDLL” 。确认OK

笔者在此选择工程名称和解决方案名称相同,这样有时会造成误导,所以建议新建工程时注意区分名称。

4、在“win32 application wizard 中“(Win32 应用程序向导)对话框的“概述”页上,选择“next 下一步”按钮。

5、因为需要在这个工程中生成DLL文件,所以需要在右侧窗格中勾选 ”Dll选项“,在”Additional Options“中可以选择

 ”Precompiled header“和”Security Development Lifecycle(SDL)“选项这样在生成的”AddDLL.cpp“文本中就会出现”#include "stdafx.h"“字样

6、选择”Finish“ 创建结束

下面开始 讲述如何向动态链接库中添加类:

 

  1. 在菜单栏上:FILE-->NEW-->File,这是会弹出一个对New File话框
  2. 在左侧窗格中选择Visual C++后,右侧窗格内容会发生变化,在右侧窗格中选择”Header File(.h)“然后选择”Open“
  3. 出现Header1.h文件,,然后选择常用菜单栏”Save“按钮,将其保存为”AddDLL.h“
  4. 添加下面代码至”AddDLL.h“文件

 

在VS2012中采用C++中调用DLL中的函数 (4)
// AddDLL.h

#ifdef ADDDLL_EXPORTS
#define ADDDLL_API __declspec(dllexport) 
#else
#define ADDDLL_API __declspec(dllimport) 
#endif
在VS2012中采用C++中调用DLL中的函数 (4)

注:dllexport、dllimport。
 

 5.在”AddDLL.h“文本中继续填写如下代码,建立名为”MatFuncs“一个基础类,这个基础类中只写了一个算术运算:两个整数相加

 namespace MathFuncs

在VS2012中采用C++中调用DLL中的函数 (4)
{
    class AddDLL 
    {
    public:
        //returns a+b
        static ADDDLL_EXPORTS_API int Add(int a,int b);

    };    //注意:MathFuncclass声明这里;不可少

}
在VS2012中采用C++中调用DLL中的函数 (4)

 然后在“解决方案资源管理器”的“AddDLL”项目中,在“源文件”文件夹中,打开”AddDLL.cpp“文本,代码应类似如下:

 #include "stdafx.h"

在VS2012中采用C++中调用DLL中的函数 (4)
#include "AddDLL.h"

using namespace std;
namespace MathFuncs
{
    int MathFuncs::Add(int a,int b)
    {
        return a+b;
    }
}
在VS2012中采用C++中调用DLL中的函数 (4)

 6.在菜单栏中“BUILD -->BUILD Solution (F7)或者Bulid AddDLL“生成解决方案,编译动态链接库,至此DLL已经生成,生成位置在上面几篇文章中有详细讲述,就是在工程目录下的Debug文件夹中

 =======================================================================

 下面开始创建引用 DLL 的应用程序

引用DLL的程序的工程,可以同编译动态链接库的工程建立在同一个Solution下,也可以不建立在同一个Solution下,不在同一个solution下的方法见文章在C++中调用DLL中的函数(3)

下面讲的是建立在同一个Solution:AddDLL下,在同一个解决方案下时,需要有一个设置,如果不设置,就会导致”Unable to find XXX.DLL“错误.

 步骤如下:

  1. 在左窗格中的“Visual C++”下,选择“Win32”。

  2. “Win32 控制台应用程序”。

  3. “确定”按钮。

  4. “下一步”按钮。

  5. 在“应用程序设置”页上的“应用程序类型”下,选择“控制台应用程序”。

  6. 在“应用程序设置”页上的“附加选项”下,清除“预编译头”复选框。

  7. “完成”按钮创建项目。 

在应用程序中使用类库的功能

 

  1. ,名为“tesDLL.cpp”。

  2. “<Projectname> 属性页”对话框 ->“通用属性”->“框架和引用”。

  3. 在“项目”选项卡上,选中“AddDLL”旁边的复选框,然后选中“确定”按钮。

  4. 可以使用相对路径(例如 ..\AddDLL\),然后选择“确定”按钮。

  5. 使用以下代码替换“testDll.cpp”的内容:

在VS2012中采用C++中调用DLL中的函数 (4)
#include "stdafx.h"
#include "AddDLL.h" //在这里需要将本工程的testDLL.h添加到工程中,否则include下会出现红色波浪线
#include <iostream> //这里的include <iostream>需要同using name space std配合使用
using namespace std;
 
int main()
{
int a = 3;
int b = 4;
cout<< MathFuncs::AddDLL::Add(a,b)<<endl;
 
getchar();//让consol能够保持住窗口
}
 
在VS2012中采用C++中调用DLL中的函数 (4)

 6.通过在菜单栏上一依次选择“Build --Build testDLL”

下面运行testDLL,需要有一个 比较细微的设置:

    1. 在“解决方案资源管理器”中,选择testDLL,然后在菜单栏上依次选择“项目”、“设为启动项目”。

    2. 输出结果 7.

相关文章: