📄 我的dll动态链接库学习笔记.htm
字号:
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DllMain</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数被</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>所提供,不用自己显式的写出来。</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'><br>
<br>
c</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>、</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>Extension DLL:</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>用来实现从</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>所继承下来的类的重新利用,也就是说,用这种类型的动态连接库,可以用来输出一个从</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>所继承下来的类。它输出的函数仅可以被使用</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>且动态链接到</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>的应用程序使用。可以从</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>继承你所想要的、更适于你自己用的类,并把它提供给你的应用程序。你也可随意的给你的应用程序提供</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>或</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>继承类的对象指针。</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>Extension DLL</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>使用</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>的动态连接版本所创建的,并且它只被用</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>类库所编写的应用程序所调用。</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>Extension DLLs </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>和</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>Regular DLLs</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>不一样,它没有一个从</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>CWinApp</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>继承而来的类的对象,所以,你必须为自己</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DllMain</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数添加初始化代码和结束代码。</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'><br>
<br>
</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>和规则</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DLL</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>相比,有以下不同:</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'><br>
<br>
1</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>、它没有一个从</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>CWinApp</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>派生的对象;</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'><br>
2</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>、它必须有一个</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DllMain</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数;</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'><br>
3</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>、</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DllMain</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>调用</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>AfxInitExtensionModule</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数,必须检查该函数的返回值,如果返回</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>0</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>,</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DllMmain</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>也返回</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>0</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>;</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'><br>
4</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>、如果它希望输出</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>CRuntimeClass</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>类型的对象或者资源</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>(Resources)</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>,则需要提供一个初始化函数来创建一个</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>CDynLinkLibrary</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>对象。并且,有必要把初始化函数输出;</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'><br>
5</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>、使用扩展</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DLL</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>的</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>应用程序必须有一个从</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>CWinApp</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>派生的类,而且,一般在</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>InitInstance</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>里调用扩展</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DLL</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>的初始化函数。</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'><br>
<br>
</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>三、</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>dll</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>入口函数:</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'><br>
<br>
1</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>、每一个</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DLL</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>必须有一个入口点,</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DllMain</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>是一个缺省的入口函数。</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DllMain</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>负责初始化</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>(Initialization)</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>和结束</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>(Termination)</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>工作,每当一个新的进程或者该进程的新的线程访问</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DLL</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>时,或者访问</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DLL</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>的每一个进程或者线程不再使用</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DLL</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>或者结束时,都会调用</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DllMain</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>。但是,使用</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>TerminateProcess</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>或</span><span
lang=EN-U
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -