好贷网好贷款

动态链接库dll的 静态加载 与 动态加载

发布时间:2016-12-3 14:49:06 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"动态链接库dll的 静态加载 与 动态加载",主要涉及到动态链接库dll的 静态加载 与 动态加载方面的内容,对于动态链接库dll的 静态加载 与 动态加载感兴趣的同学可以参考一下。

dll 两种链接方式  : 动态链接和静态链接(链接亦称加载) 动态链接是指在生成可执行文件时不将所有程序用到的函数链接到一个文件,因为有许多函数在操作系统带的dll文件中,当程序运行时直接从操作系统中找。   而静态链接就是把所有用到的函数全部链接到exe文件中。 动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在运行时再装入;   而静态链接是把所有的代码和数据都复制到本模块中,运行时就不再需要库了。   1.生成  静态链接库 lib 和动态链接库 dll   新建工程 (newdll)  win32项目 ->  dll 添加.h文件  betabinlib.h #ifndef BETABINLIB_H #define BETABINLIB_H #ifdef NEWDLL_EXPORTS //自动添加的宏 右键工程-属性-配置属性-预处理器-..定义 #define MYDLL_API extern "C" __declspec(dllexport) #else #define MYDLL_API extern "C" __declspec(dllimport) #endif MYDLL_API int add(int x, int y); // 必须加前缀 #endif 添加.cpp文件  betabinlib.cpp #include "stdafx.h" #include "betabinlib.h" int add(int x, int y) { return x + y; } 编译生成  .dll 和 .lib文件   2.使用 (1)dll的静态加载--将整个dll文件 加载到  .exe文件中 特点:程序较大,占用内存较大,但速度较快(免去 调用函数LOADLIB等) 测试: 需要  .lib  和 .dll两个文件     (.lib 做 引导用),.h文件 main.cpp #include <stdio.h> #include "betabinlib.h" #include <Windows.h> #pragma comment(lib, "newdll.lib") int main() { printf("2 + 3 = %d \n", add(2, 3)); return 0; } (2) dll的动态加载--根据需要加载响应函数,随时可卸载。不会因为找不到dll, 导致程序不能运行(需要自己做判断处理)。 只需要 .lib文件,不需要 .h文件 main.cpp #include <stdio.h> #include <Windows.h> int main() { HINSTANCE h=LoadLibraryA("newdll.dll"); typedef int (* FunPtr)(int a,int b);//定义函数指针 if(h == NULL) { FreeLibrary(h); printf("load lib error\n"); } else { FunPtr funPtr = (FunPtr)GetProcAddress(h,"add"); if(funPtr != NULL) { int result = funPtr(3, 3); printf("3 + 3 = %d \n", result); } else { printf("get process error\n"); printf("%d",GetLastError()); } FreeLibrary(h); } return 0; }

上一篇:SQL语句执行顺序
下一篇:MFC关闭窗口用哪个函数?

相关文章

相关评论