1天DLL学习总结。

2种使用DLL的方式:
①.load-time (需要链接Lib文件)

函数声明__declspec(dllimport) 可选,其他声明必选!

②.run-time

第一步:LoadLibrary
第二步:GetProcAddress (无UNICODE版本!)
第三步:使用……

 

DLL制作:


首先说下Entry-Point Function,这个是可选的

原型:
BOOL WINAPI DllMain(
  [in]                 HINSTANCE hinstDLL,
  [in]                 DWORD fdwReason,
  [in]                 LPVOID lpvReserved
);

根据MSDN 函数名DllMain是可以自定义的。(这个问题以后说吧)

那什么时候调用呢。

4种情况

A process loads the DLL.
A process unloads the DLL.
A new thread is created in a process that has loaded the DLL.
A thread of a process that has loaded the DLL terminates normally, not using

TerminateThread or TerminateProcess.

===============================分割线来了======================================


DLL中的东东分为2种,导出和内部。内部暂时无视,来说下导出!

MSDN给了3种导出方法

第3种不怎么用,用到了映射导出。
说下前2种:
①。模块定义文件
②。__declspec(dllexport)

现在来说下这2种对于extern "C"和几种调用约定的支持。

【以下说的支持是在函数GetProcAddress第二个参数。】


①模块定义文件→Just支持extern "C" 。
而C++函数则需要去获得修饰名:

用DUMPBIN /EXPORTS 文件名。这种比较麻烦建议用另外一种:/MAP链接选项

设置方法:链接器→调试→生成映射文件

在Debug文件夹会有个.map文件,修饰名去里面找。

②__declspec(dllexport)

只支持  默认调用约定 + extern "C"

__stdcall则需要使用修饰名了。。对于VC++编译器的:_name@bytes(参数字节数)

C++函数不支持。需要给出修饰名。所以__declspec(dllexport)对于run-time链接感觉很废材
不过某些方面算方便。

 

===============================分割线又来了======================================


下面说下load-time链接。

建议__declspec(dllimport) 不要省,即使是可选的函数声明。

这个我没怎么用,以后补上

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值