您的位置:首页 > 其它

Win32 DLL动态库学习笔记一

2012-07-13 00:20 218 查看
  Win32 动态库分三种:Non-MFC DLL(非MFC 动态库)、MFC Regular DLL(MFC 规则DLL)、MFC Extension DLL(MFC 扩展DLL)。本文主要记录非MFC动态库。

  在我看来,采用库机制要知道两方面:一、建立动态库;二、使用动态库。再要明白动态库导出的是什么,有变量,函数和类三种。再要看动态库的两种调用方法显示调用、隐式调用。

  建库时,有三种方式来指导产生.dll和.lib文件两个文件:
    一、使用__declspec(dllexport)声明。
    二、若是使用模块定义文件(.def)来指导产生.dll和.lib文件两个文件。
    三、LINK 命令中的 /EXPORT 规范
    若两种方式都选择,则所有指明导出的函数都将被导出。

  DLL对象导入的两种方式:
  显示加载:
    a)使用函数 LoadLibrary,GetProcAddress,FreeLibrary 三个函数,就足够完成调用要求。
    b)要注意的是 GetProcAddress 函数的返回值需要强制转换为目标格式,所以一般需要使用typedef定义一个类型,用于定义一个变量,同时用于格式转换。
    c)显示加载动态库只能导出函数,要获取变量或者设置变量需要通过函数包装形式进行。

  隐式加载:
    a)导入lib文件。可以使用#pragma comment(lib,"")加入,也可以使用编译命令,或者IDE选项。然后在调用文件中使用extern "C" __declspec(dllimport)修饰要导入的函数,就能够直接使用函数而不需要转换咯。也可以不使用修饰符,而使用GetPorcAddress函数通过序号来加载,这时GetProcAddress的第一个参数可以使用GetModuleHandle获得,第二个参数为序号,使用MAKEINTRESOURCE(1)宏代替,括号内为序号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: