这几天涉及到vc下dll库的调用和创建问题,由于以前没有接触过这方面的知识,所以参考了一些资料。为了方便自己以后参考,将创建及调用的方法做如下记录,如有幸被您发现不足之处希望给予指正:
一、vc++6.0下创建dll动态库(由于本人需求,在这里只介绍MFC规则的DLL库创建方式)
注:DLL的编制与具体的编程语言及编译器无关,动态链接库随处可见,VC++支持三种DLL:非MFC动态库、MFC规则DLL和MFC扩展DLL。DLL导出函数(或变量、类)可供应用程序调用;DLL内部函数只能在DLL程序内使用,应用程序无法调用它们。
1、打开vc++6.0 —>文件—>新建工程(MFC AppWizard(dll))—>动态链接库使用共享MFC DLL//表示创建一个MFC规则的dll库(详细操作见下图——创建一个名字为Mydll的动态库)
2、在创建后的工程中会有一些生成的文件,打开Mydll.def文件(如果无法打开文件,请关闭工程保存后关闭,并重新打开工程),在文件中加入函数名Func_add
3、打开Mydll.h文件中添加:外部函数声明//求和函数,函数名为Add_new
extern “C” __declspec(dllexport) int __stdcall Add_new(int a,int b);
4. 在Myddl.cpp文件中添加: 外部函数实现
extern “C” __declspec(dllexport) int __stdcall Func_add(int a,int b)
{
return a+b;
}
5、组建——全部重建,会在debug目录下生成一个Mydll.dll文件,到此为止我们的dll库就创建成功了。
二、如何调用动态库
注:调用动态库分为两种方式:一种是静态调用方式,另一种为动态调用方式!本人理解其两者并没有太大的区别。静态调用方式就是只要程序运行就加载动态库到内存中,即使程序运行期间没有用到dll库里的函数也同样加载!动态调用方式是指每次用到dll库中的函数时加载该库,调用结束之后释放内存!理论上将静态调用方式占内存运行快,动态调用方式节省内存,但运行速度稍慢!
1、静态调用方式举例
2、动态调用方式(将生成dll库(Mydll.dll)复制到)
只需要在代码中加入以下几行
HMODULE hLib;//定义HMODULE类型句柄,加载dll后返回的句柄,可通过该句柄获取函数入口地址
typedef int (__stdcall *fun)(int, int);//定义函数指针类型
fun myadd;//定义一个fun类型的函数指针
hLib = LoadLibrary("Mydll.dll");//在需要调用dll中函数代码前加入,表示加载dll库到内存
myadd = (fun) GetProcAddress(hLib, "Func_add");//获取Func_addr函数的指针
myadd(1,3);//调用该函数
FreeLibrary(hLib);//释放dll库
谢谢观看^_^
本文出自 “小喜子” 博客,请务必保留此出处http://4817659.blog.51cto.com/4807659/1100883
转载于:https://blog.51cto.com/xiaoxizhi/1138420