一、DLL 生成
#ifndef DllTest2_H_
#define DllTest2_H_
#ifdef MYLIBDLL
#define MYLIBDLL extern "C" _declspec(dllimport)
#else
#define MYLIBDLL extern "C" _declspec(dllexport)
#endif
MYLIBDLL int Add(int plus1, int plus2);
// you can also write like this:
// extern "C"{
// _declspec(dllexport) int Add(int plus1, int plus2)
//}
#endif
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
{
}
.def文件
LIBRARY
EXPORTS
Add @1
二、静态链接 图形方式
1.拷贝dll和lib到exe文件夹中
2.拷贝.h文件夹到项目中3.找到.h文件夹的路径 (项 目--属性--c/c++--常规)
4.找到lib文件的路径(项目--属性--链接--常规)
5.找到lib文件(项目--属性--链接--输入)
7.测试文件:
#include "stdafx.h"
#include <iostream>
#include "DllTest2.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
}
8.结果:
a+b=50
hello
luckystar原创,转载请保留这几个字,谢谢
三、静态链接 代码方式
创建项目->Win32控制台应用程序,名称:UseDLL。
将DllTest2.lib文件放在与UseDLL.exe文件的目录下。
(如果lib文件不在exe目录下,就要添加附加库目录:项目属性--沛配置属性--链接器--常规--附加库目录)
创建源文件UseDll.cpp
UseDll.cpp代码如下:
// UseDll.cpp : 定义控制台应用程序的入口点。
#pragma comment (lib,"MyDLL.lib")
(可以不要该语句,但要添加依赖项:项目属性--沛配置属性--链接器--输入--附加依赖项)
#include "stdafx.h"
#include <iostream>
using namespace std;
extern "C" _declspec(dllimport) int Add(int plus1, int plus2);
(可以不要该语句,而是使用#include头文件,头文件的内容与DLL中的一致,当头文件不在项目目录下时,要添加目录:
项目属性--沛配置属性--c/c++--常规--附加包含目录)
int _tmain(int argc, _TCHAR* argv[])
{
int a = 20;
int b = 30;
cout<<"a+b="<<Add(a, b)<<endl;
getchar();
return 0;
}
运行结果如下:
a+b=50
总结: 静态链接DLL,需要做两方面的工作:
1、引入DLL
可以使用语句#pragma comment (lib,"MyDLL.lib")
项目属性--沛配置属性--链接器--输入--附加依赖项。 添加MyDLL.lib
但两者的前提是DLL在exe目录下,如果不在目录下,1)在上面的DLL名字前加上目录信息 如#pragma comment (lib,"../../MyDLL.lib") ;2)就要指定所在目录:项目属性--沛配置属性--链接器--常规--附加库目录 。通常我们使用第二种
2、 声明函数
我们可以在代码中使用语句 extern "C" _declspec(dllimport) int Add(int plus1, int plus2);
也可以使用头文件.h,他的内容与DLL头文件的内容一致即可。如果我们不写这个头文件,而是直接使用DLL项目中的头文件,1)在include时在头文件前加上路径,2)设置包含目录 项目属性--沛配置属性--c/c++--常规--附加包含目录),我们一般使用第二种