DLL使用简介

上一篇 / 下一篇  2008-04-08 14:47:55 / 个人分类:c++

一,分类

1.静态库:

使用静态库时候,发布产品不需要(.dll)文件.

静态库中 函数 和 数据都在(.LIB)文件当中.

2.动态库:

组成: 引入库(.lib):声明函数及变量的符号名.

              DLL(.dll):函数的具体实现过程.

二.DLL创建

1.DLL中的函数必须声明为  _declspec  (dllexport)   才可以被其他客户端程序调用.

2.客户端程序中使用函数前需要声明. 可以为 extern 声明,  也可以是  _declspec  (dllimport)   声明.

三.DLL加载

1.隐式加载(vc++)

  (1) .lib 与 .dll 拷贝倒当前工程目录下

  (2) 在VC中设置引入 引入库文件(.lib)

  (3)函数声明.  #include "myDll.h"

2.显示加载

代码如下:

(1)HINSTANCE  hInst;

(2)hInst = LoadLibrary("Dll.dll");//加载DLL模块,参数:文件名,返回值:文件句柄

(3)typedef int (*PROC)(int a, int b);

(4)PROC proc = (PROC)GetProcAddress(hInst, " add" );//加载DLL中的函数,参数:文件句柄/函数名,返回值:函数指针

(5) proc (4, 6);

四.其他

1.dumpbin命令

         //查看.dll或.exe的导入,导出函数

         dumpbin -export dll.dll

         dumpbin -import test.exe

2.Depends工具

         //查看.dll 或 .exe文件中的动态链接库的依赖情况, 可以查看.dll中函数情况

3.名字改编问题

引发原因:(一):不同编译器对函数进行名字改编,所以imports时候出错.例如C++,C

                 (二):调用约定不同: __cdecl :c调用       ,      __stdcall: 标准调用约定

解决方法:(一):extern "C": 解决c++与c直接的冲突. 不适于含有类的DLL引入C文件.  不能解决调用约定问题

                 (二):模块定义文件(DEF): 在工程源文件中添加文件 xxx.def    .内容如下

                         LIBRARY   DllNname

                         EXPORTS

                         utName =  interNname

4.DllMain() 函数

系统加载DLL时,自动调用DllMain()函数

作用:(1):返回DLL的句柄地址

         (2):DLL的调用方式

5.VC++6.0支持MFC DLL

(略)


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar