标签:style blog color 使用 ar strong 文件 div 问题
1、动态链接库概述:
2、动态链接库的创建:
要导出的函数的形式为:
extern "C" _declspec(dllexport) int add(int a, int b) { return a+b; }
为解决名字改编问题,可为工程添加一个模块定义文件.def
LIBRARY MFC-Add EXPORTS add
要导出的类的形式为:
class _declspec(dllexport) Point { public: void OutPut(int x, int y); };
编译之后会生成:一个DLL(.dll)文件、一个引入库(.lib)文件等
注:若在声明类时,指定了导出标志,那么该类中的所有函数均被导出;否则只导出那些声明时指定了导出标志的类成员函数
3、动态链接库的加载:
(1) 隐式加载
利用 extern 或 _declspec(dllimport) 声明外部函数(最好将此声明写在一个头文件*.h中)
_declspec(dllimport) int add(int a, int b);
导入对应的引入库(.lib)文件:在项目“设置”中链接lib库 或 在源文件中使用代码链接lib库:
#pragma comment(lib, "*.lib")
将动态链接库文件所在目录添加到系统的环境变量:path中
(2) 显式加载
将指定的可执行模块映射到调用进程的地址空间
#include <Windows.h> HINSTANCE handlerDLL = NULL; handlerDLL = LoadLibrary(_T("..\\..\\MFC-Add\\Debug\\MFC-Add.dll"));
获取该动态链接库中导出函数的地址
typedef int(_stdcall *ADDPROC)(int a,int b);//声明MESSAGE为指向函数的指针类型,函数返回值类型为int; _stdcall即标准调用约定 ADDPROC AddProc; AddProc = (ADDPROC)GetProcAddress(handlerDLL,_T("add"));
调用导出函数
AddProc(5,6);
当不需要访问dll时,释放对dll的引用
FreeLibrary("..\\..\\MFC-Add\\Debug\\MFC-Add.dll");
注:
标签:style blog color 使用 ar strong 文件 div 问题
原文地址:http://www.cnblogs.com/gaohongchen01/p/3969583.html