1、动态链接库分为:Non-MFC DLL、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)
Non-MFC DLL文件
隐式调用:
2、创建工程win32 project,并选择 DLL 链接库。
3、在cpp文件中添加如下代码:
#include "stdafx.h"
#ifndef DYNAMIC_CPP
#define DYNAMIC_CPP
extern "C" int __declspec(dllexport) add(int x, int y)
{
return x + y;
}
#endif
4、重新创建工程,进行测试:
#pragma comment(lib, "..\\dynamic\\Debug\\dynamic.lib")
extern "C" int add(int,int);
int _tmain(int argc, _TCHAR* argv[])
{
printf("2 + 3 = %d\n",add(2,3));
return 0;
}
显示调用:
5、修改main函数中调用,如下:
typedef int (*lpAddFun)(int , int);//定义函数指针
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hDLL;//dll 句柄
lpAddFun addFun;//定义函数指针
hDLL = LoadLibrary(L"dynamic.dll");
if(hDLL == NULL)
{
printf("load failure\n");
}
addFun = (lpAddFun)GetProcAddress(hDLL,"add");
if(addFun == NULL)
{
printf("get function address failure\n");
}
printf("2 + 3 = %d\n",(*addFun)(2,3));
FreeLibrary(hDLL);
return 0;
}
}
首先,语句typedef int ( * lpAddFun)(int,int)定义了一个与add函数接受参数类型和返回值均相同的函数指针类型。随后,在main函数中定义了lpAddFun的实例addFun;
其次,在函数main中定义了一个DLL HINSTANCE句柄实例hDll,通过Win32 Api函数LoadLibrary动态加载了DLL模块并将DLL模块句柄赋给了hDll;
再次,在函数main中通过Win32 Api函数GetProcAddress得到了所加载DLL模块中函数add的地址并赋给了addFun。经由函数指针addFun进行了对DLL中add函数的调用;
最后,应用工程使用完DLL后,在函数main中通过Win32 Api函数FreeLibrary释放了已经加载的DLL模块。
http://pcedu.pconline.com.cn/empolder/gj/vc/0509/699672_1.html