dll动态链接库简单入门

来源:互联网 发布:知乎怎样添加话题 编辑:程序博客网 时间:2024/06/05 11:38

总结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.
    参考:http://wenku.baidu.com/link?url=ZOI_xCuZODcRwqlYSb_UXfxhE9rB5shzFdmF6-hnFOXe30mo3yHTCs1yKiEgpWiZWX7i4I4tk7uLPNdvPmWBGvs956B7HtTyzZGT-XvTHYu
    优点:1.节省内存,所有进程可以共享内存中加载的dll程序,也因此减少代码量。2.升级程序无需重新编译重新安装,只更换dll即可。3.可供多种编程语言使用。
    补充阅读:所有Windows API函数都是以动态链接库形式提供。

0 0