【第一步】创建自己的dll
1.打开vs2005,选择菜单【File-New-Project】,在弹出对话框中选择[Visual C++]下的[Win32]-[Win32 Console Application],输入工程名后确认。
2.在弹出的对话框中选择[next],在Application Settiongs中选择Application type为Dll,Additional options选择Empty project,然后点Finish。
这时就创建了一个空的可以生成dll文件的工程。
3.在工程中添加一个头文件(这里为dll_test.h),在头文件中写入如下内容:
1 #ifndef _DLL_TUTORIAL_H
2 #define _DLL-TUTORIAL_H
3
4 #include<iostream>
5
6 #if defined DLL_EXPORT
7 #define DECLDIR _declspec(dllexport)
8 #else
9 #define DECLDIR _declspec(dllimport)
10 #endif
11
12 extern "C"
13 {
14 DECLDIRint add(int a, int b);
15 DECLDIR void Function(void);
16 }
17
18 #endif
这里要说明的是:
在VC中有两个方法来导出dll中定义的函数:
(1) 使用__declspec,这是一个Microsoft定义的关键字。
(2) 创建一个模板定义文件(Module-Definition File,即.DEF)。
第一种方法稍稍比第二种方法简单,在这里我们使用的是第一种方法。
__declspec(dllexport)函数的作用是导出函数符号到在你的Dll中的一个存储类里去。
当下面一行被定义时我定义DECLDIR宏来运行这个函数。
#define
DLL_EXPORT
在此情况下你将导出函数Add(int a,int b)和Function().
4.创建一个源文件(名字为dll_test.cpp),内容如下:
1 #include <iostream>
2 #define DLL_EXPORT
3 #include "dll_test.h"
4
5 extern "C"
6 {
7 // 定义了(DLL中的)所有函数
8 DECLDIR int Add( int a, int b )
9 {
10 return( a + b );
11 }
12
13 DECLDIR void Function( void )
14 {
15 std::cout << "DLL Called!" << std::endl;
16 }
17 }
18
【第二步】使用创建好的DLL
现在已经创建了DLL,那么如何在一个应用程序中使用它呢?
DLL被生成后,它创建了一个.dll文件和一个.lib,这两个都是使用dll时需要用到的。
在具体介绍之前先看一下dll的链接方式。
(1)隐式连接
这里有两个方法来载入一个DLL,一个方法是只链接到.lib文件,并将.dll文件放到要使用这个DLL的项目路径中。
因此,创建一个新的空的Win32控制台项目并添加一个源文件。将我们创建好的DLL放入与新项目相同的目录下。同时我们还必须链接到dll_test.lib文件。
可以在项目属性中设置,也可以在源程序中用下面的语句来链接:
#pragma comment(lib, "dll_test.lib")
最后,我们还要在新的win32控制台项目中包含前面的dll_test.h头文件。可以把这个头文件放到新建win32控制台项目的目录中然后在程序中加入语句:
#include "dll_test.h"
新项目代码如下:
#include<iostream>
#include "DLLTutorial.h"
int main()
{
Function();
std::cout<<
Add(32, 56)<< endl;
return 0;
}
(2)显示链接
稍微复杂一点的加载DLL的方法需要用到函数指针和一些Windows函数。但是,通过这种载入DLL的方法,不需要DLL的.lib文件或头文件,而只需要DLL即可。
下面列出一些代码:
/****************************************************************/
#include <iostream>
#include <windows.h>
typedef int (*AddFunc)(int,int);