⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 关于vc中的dll的编程.htm

📁 我在网上收集的一些有关vcDLL编程的文章。
💻 HTM
📖 第 1 页 / 共 4 页
字号:
  #include&nbsp;&quot;stdafx.h&quot;<br>
  #include&nbsp;&quot;MyRegularDll.h&quot;<br>
  //&nbsp;Note!<br>
  <br>
  //&nbsp;If&nbsp;this&nbsp;DLL&nbsp;is&nbsp;dynamically&nbsp;linked&nbsp;against&nbsp;the&nbsp;MFC&nbsp;DLLs,&nbsp;any&nbsp;functions&nbsp;exported&nbsp;from&nbsp;this&nbsp;DLL&nbsp;which&nbsp;call&nbsp;<br>
  //into&nbsp;MFC&nbsp;must&nbsp;have&nbsp;the&nbsp;AFX_MANAGE_STATE&nbsp;macro&nbsp;added&nbsp;at&nbsp;the&nbsp;very&nbsp;beginning&nbsp;of&nbsp;the&nbsp;function.<br>
  //<br>
  //&nbsp;For&nbsp;example:<br>
  //<br>
  //&nbsp;extern&nbsp;&quot;C&quot;&nbsp;BOOL&nbsp;PASCAL&nbsp;EXPORT&nbsp;ExportedFunction()<br>
  //&nbsp;{<br>
  //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AFX_MANAGE_STATE(AfxGetStaticModuleState());<br>
  //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;normal&nbsp;function&nbsp;body&nbsp;here<br>
  //&nbsp;}<br>
  //<br>
  //&nbsp;It&nbsp;is&nbsp;very&nbsp;important&nbsp;that&nbsp;this&nbsp;macro&nbsp;appear&nbsp;in&nbsp;each&nbsp;function,&nbsp;prior&nbsp;to&nbsp;any&nbsp;calls&nbsp;into&nbsp;MFC.&nbsp;This&nbsp;means&nbsp;<br>
  //that&nbsp;it&nbsp;must&nbsp;appear&nbsp;as&nbsp;the&nbsp;first&nbsp;statement&nbsp;within&nbsp;the&nbsp;function,&nbsp;even&nbsp;before&nbsp;any&nbsp;object&nbsp;variable&nbsp;<br>
  //declarations&nbsp;as&nbsp;their&nbsp;constructors&nbsp;may&nbsp;generate&nbsp;calls&nbsp;into&nbsp;the&nbsp;MFC&nbsp;DLL.<br>
  <br>
  BEGIN_MESSAGE_MAP(CMyRegularDllApp,&nbsp;CWinApp)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_MSG_MAP(CMyRegularDllApp)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;NOTE&nbsp;-&nbsp;the&nbsp;ClassWizard&nbsp;will&nbsp;add<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;and&nbsp;remove&nbsp;mapping&nbsp;macros&nbsp;here.<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;DO&nbsp;NOT&nbsp;EDIT&nbsp;what&nbsp;you&nbsp;see&nbsp;in&nbsp;these&nbsp;blocks<br>
  END_MESSAGE_MAP()<br>
  <br>
  ////////////////////////////////////////////////////////////<br>
  //&nbsp;CMyRegularDllApp&nbsp;construction<br>
  CMyRegularDllApp::CMyRegularDllApp()<br>
  {<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TODO:&nbsp;add&nbsp;construction&nbsp;code&nbsp;here,<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Place&nbsp;all&nbsp;significant&nbsp;initialization&nbsp;in&nbsp;InitInstance<br>
  }<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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'>AppWizard</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'>Non-MFC&nbsp;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'>AppWizard</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>
  <br>
  [4]<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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&nbsp;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'>Extension&nbsp;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'>.</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'><br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extension&nbsp;DLLs&nbsp;</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&nbsp;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'>.</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>
  #include&nbsp;&quot;stdafx.h&quot;<br>
  #include&nbsp;<br>
  <br>
  static&nbsp;AFX_EXTENSION_MODULE&nbsp;PROJNAMEDLL&nbsp;=&nbsp;{&nbsp;NULL,&nbsp;NULL&nbsp;};<br>
  <br>
  extern&nbsp;&quot;C&quot;&nbsp;int&nbsp;APIENTRY<br>
  DllMain(HINSTANCE&nbsp;hInstance,&nbsp;DWORD&nbsp;dwReason,&nbsp;LPVOID&nbsp;lpReserved)<br>
  {<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(dwReason&nbsp;==&nbsp;DLL_PROCESS_ATTACH)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE0(&quot;PROJNAME.DLL&nbsp;Initializing!\n&quot;);<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Extension&nbsp;DLL&nbsp;one-time&nbsp;initialization<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxInitExtensionModule(PROJNAMEDLL,hInstance);<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Insert&nbsp;this&nbsp;DLL&nbsp;into&nbsp;the&nbsp;resource&nbsp;chain<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;CDynLinkLibrary(Dll3DLL);<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(dwReason&nbsp;==&nbsp;DLL_PROCESS_DETACH)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE0(&quot;PROJNAME.DLL&nbsp;Terminating!\n&quot;);<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;&nbsp;//&nbsp;ok<br>
  }<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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'>AfxInitExtensionMoudle</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'>.</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'>NEW</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'>Extension&nbsp;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'>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'>.</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_PROCESS_DETACH</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'>AfxTermEXtensonModule</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>
  </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>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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'>&nbsp;<span
  style='color:#CCCCCC'><o:p></o:p></span></span></p>
  </td>
 </tr>
</table>

<p class=MsoNormal><span lang=EN-US><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></span></p>

</div>

</body>

</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -