(1)新建项目--->win32控制台应用程序,输入项目名称,例如“dllTest”,点击确定;
(2)点击下一步:
(3)在出现的应用程序设置中,选择DLL(默认为控制台应用程序),如图所示:
(4)点击完成,之后,就可以写你的库接口代码了。
(5)这个时候,你会发现项目中出现了一个dllTest.cpp的文件,该文件的第一条语句,是这样的:#include "stdafx.h"。Stdafx.h是visual studio的预编译头文件,主要是为了加快编译的速度。为了让代码有更好的跨平台编译能力,我建议去除该选项。Stdafx.h预编译选项的去除是这样的,依次点击:dllTest(即,当前项目)-->属性-->c/c++-->预编译头, 如下图所示:
或许,你已经发现了,“创建/使用预编译头”的属性为“使用预编译头(/Yu)”,这里,只需用将该属性修改为"不使用预编译头"即可。如下图所示:
之后,点击“应用”,“确定”。这样,你就取消了VS2008默认的预编译选项。
(6)接着,我们来定义接口。在这里,我打算定义一个类CDllTest,该类只有一个函数,int Sum(int a, int b);完成加法运算。参考代码如下所示:
dllTest.h
#ifndef DLL_TEST_H
#define DLL_TEST_H
#ifndef DLL_API
#define DLL_API _declspec(dllexport)
//#else
//#define DLL_API _declspec(dllimport)
#endif
class DLL_API CDllTest
{
public:
CDllTest();
~CDllTest();
int Sum(int a, int b);
};
#endif
dllTest.cpp
#include "dllTest.h"
int CDllTest::Sum(int a, int b)
{
int val = a+b;
return val;
}
CDllTest::CDllTest()
{
}
CDllTest::~CDllTest()
{
}
(7)代码写完了,接着就是编译了,选择debug模式或者release模式都可以。不过,如果是要发布,最好选择release模式。需要提醒的是,vs2008默认是生成.dll文件,也就是所谓的动态链接库(dll, dynamic link library)。如果你需要编译静态链接库,只需要设置一下,重新编译就可以了。设置方法是:项目-->属性-->常规, 这里,将配置类型从动态库(.dll)改为静态库(.lib)即可
默认为动态库:
修改为动态库:
修改之后,重新编译,就生成了dllTest.lib这个静态库文件了。
(8)接下来,我们再建立一个win32控制台应用程序,来验证刚才生成的lib静态库是否可以正常工作。首先,建立一个名为TestForDllTest的工程,然后,依次选择,项目-->属性-->链接器-->输入, 在其中的附加依赖项属性中,填入dllTest.lib,如下图所示:
(9)点击确定,之后,把刚才dllTest工程中生成的dllTest.libl和dllTest.h(如果刚才生成的是动态库,就需要将dllTest.lib,dllTest.dll,dllTest.h三个都拷贝过去)文件拷贝到当前目录。这样,你就可以测试刚才生成的那个dllTest.lib是否可以正常运行了。这里不妨给出一个参考测试程序:
#include "stdafx.h"
#include "dllTest.h"
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
CDllTest dt;
int res = dt.Sum(1, 2);
cout<<"res: "<<res<<endl;
system("pause");
return 0;
}