1 / 6
文档名称:

(动态链接库)DLL编写与使用方法.doc

格式:doc   大小:31KB   页数:6页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

(动态链接库)DLL编写与使用方法.doc

上传人:tmm958758 2019/6/4 文件大小:31 KB

下载得到文件列表

(动态链接库)DLL编写与使用方法.doc

相关文档

文档介绍

文档介绍:1、DLL的概念DLL(DynamicLinkableLibrary),动态链接库,可以向程序提供一些函数、变量或类。这些可以直接拿来使用。静态链接库与动态链接库的区别:(1)静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含在最终生成的EXE文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。(2)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。动态链接库的分类:VisualC++支持三种DLL,它们分别是Non-MFCDLL(非MFC动态库)、MFCRegularDLL(MFC规则DLL)、MFCExtensionDLL(MFC扩展DLL)。非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;MFC规则DLL包含一个继承自CWinApp的类,但其无消息循环;MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。2、:extern“C”__declspec(dllexport)intadd(inta,intb);其中extern“C”为声明为C编译。由于C++编译器在编译的时候会造成其函数名的该变,在其他应用程序中导致函数不可调用,而C编译器则不会在编译后改变其函数名。这样如果用C编译的程序来调用该dll中的函数时,可能会造成找不到该函数。__declspec(dllexport)表示该函数为DLL输出函数,即其他应用程序可以调用该函数从dll中声明输出函数有两种方式:(1)另外一种方式是采用模块定义(.def)文件声明,.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。(2)用__declspec(dllexport)来声明函数如果使用VisualC++来创建dll,对于同样用VC创建的exe来说,调用dll没有什么问题。而如果用其他工具来创建的exe来调用dll,就会出现问题。因为即使你不用C++编译器,MicrosoftC编译器也会损害C函数。当用__stdcall将函数输出时,C编译器会将函数改为_******@1的形式。:EXPORTSfunc这样,dll将用func函数名来输出函数。另一种方式是用#pragma(linker,“/exports:func=_******@1”),告诉编译器输出函数func,这种方式没有前一种好。如果通过VC++编写的DLL欲被其他语言编写的程序调用,应将函数的调用方式声明为__stdcall方式,WINAPI都采用这种方式,而C/C++缺省的调用方式却为__cdecl。__stdcall方式与__cdecl对函数名最终生成符号的方式不同。若采用C编译方式(在C++中需将函数声明为extern"C"),__stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如_******@number;而__cdecl调用约定仅在输出函数名前面加下划线,形如_functionname。;:导出DLL函数LIBRAR