总结windows系统中vs2008编译环境下,创建dll然后使用dll非常简单(代码量最少,让你知道哪些是必要的代码)的一次感性尝试。
dll定义:windows系统中用于实现函数共享的文件。文件内容是二进制代码,扩展名通常是.dll。
创建:
编译环境:vs2008英文版。
1.新建dll空工程:菜单file->new->project->visual c++->win32->win32 console application->填写dll工程名字myDll->OK->next->DLL->empty project->finish
2.新建dll工程的.cpp文件:在左侧solution explorer窗口下,右击source files->add->new item->visual c++->code->选c++ file(.cpp)->填写.cpp名字add->确认add->在add.cpp文件中定义add函数:
#include "myDll.h"
int add(int a, int b){ return a + b; }
3.在左侧solution explorer窗口下,右击myDll工程名->properties->general->configuration type->static library(.lib)->确定。
//使用dll有两种方式,一是载入时动态链接,二是运行时动态链接,因为前者简单,所以采用前者。此时不生成myDll.dll,生成myDll.lib。
4.新建myDll.lib输入库的.h文件:在左侧solution explorer窗口下,右击header files->add->new item->visual c++->code->选header file(.h)->填写.h名字myDll->确认add->在myDll.h文件中声明add函数:
extern "C" _declspec(dllexport) int add(int a, int b);
//extern "C" 告诉编译器该函数按照C语言规范编译,并且动态链接时不用加函数名修饰符(如函数名前加下划线前缀),可以直接使用原函数名
//_declspec(dllexport)声明函数是导出函数
5.按F7编译。
使用:
1.新建测试空工程:在左侧solution explorer窗口下,右击solution 'myDll'->add->new project->visual c++->win32->win32 console application->填写测试工程名字test->OK->next->console application->empty project->finish
2.新建测试工程的.cpp文件:在左侧solution explorer窗口下,右击test工程的source files->add->new item->visual c++->code->选c++ file(.cpp)->填写.cpp名字test->确认add->在test.cpp文件中加入如下代码:
#include <iostream>
#include "..\myDll\myDll.h" //包含dll的头文件
#pragma comment(lib, "..\\Debug\\myDll.lib") //隐式链接
using namespace std;
int main(){
cout<<add(1,2);
return 0;
}
//使用方式一:载入时使用隐式动态链接,起始目录从工程当前目录开始。也可以在项目属性中设置库的显式动态链接。
//另一种使用方式是运行时使用动态链接(比较繁琐,见参考链接)
//动态链接.lib库文件和静态链接库文件不同,只存放dll的导出表,不含代码
3.在左侧solution explorer窗口下,右击test工程名->set as startup project->按ctrl+F5,dos窗口显示3.
优点:1.节省内存,所有进程可以共享内存中加载的dll程序,也因此减少代码量。2.升级程序无需重新编译重新安装,只更换dll即可。3.可供多种编程语言使用。
补充阅读:所有Windows API函数都是以动态链接库形式提供。