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

📄 vc++动态链接库编程之mfc扩展 dll教程_龙腾教程网.htm

📁 从网上下载的关于学习动态链接库的连载教程
💻 HTM
📖 第 1 页 / 共 2 页
字号:
    <TD>_<U><FONT color=#0000ff>_declspec</FONT></U>(dllexport)</TD></TR>
  <TR>
    <TD>AFX_API_IMPORT</TD>
    <TD>__declspec(dllexport)</TD></TR>
  <TR>
    <TD>AFX_DATA_IMPORT</TD>
    <TD>__declspec(dllexport)</TD></TR>
  <TR>
    <TD>AFX_CLASS_EXPORT</TD>
    <TD>__declspec(dllexport)</TD></TR>
  <TR>
    <TD>AFX_API_EXPORT</TD>
    <TD>__declspec(dllexport)</TD></TR>
  <TR>
    <TD>AFX_DATA_EXPORT</TD>
    <TD>__declspec(dllexport)</TD></TR>
  <TR>
    <TD>AFX_EXT_CLASS</TD>
    <TD>#ifdef 
_AFXEXT<BR> AFX_CLASS_EXPORT<BR>#else<BR> AFX_CLASS_IMPORT</TD></TR>
  <TR>
    <TD>AFX_EXT_API</TD>
    <TD>#ifdef _AFXEXT<BR> AFX_API_EXPORT<BR>#else<BR> AFX_API_IMPORT</TD></TR>
  <TR>
    <TD>AFX_EXT_DATA</TD>
    <TD>#ifdef 
  _AFXEXT<BR> AFX_DATA_EXPORT<BR>#else<BR> AFX_DATA_IMPORT</TD></TR></TBODY></TABLE><BR>  <B>6.2 
MFC扩展DLL<U><FONT 
color=#0000ff>导出</FONT></U>MFC派生类</B><BR><BR>  在这个例子中,我们将产生一个名为“ExtDll”的MFC扩展DLL工程,在这个DLL中导出一个对话框类,这个对话框类派生自MFC类CDialog。<BR><BR>  使用MFC向导生成MFC扩展DLL时,系统会自动添加如下代码:<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
  <TBODY>
  <TR>
    <TD>static AFX_EXTENSION_MODULE ExtDllDLL = { NULL, NULL };<BR>extern "C" 
      int APIENTRY<BR><BR>DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID 
      lpReserved )<BR>{<BR> // Remove this if <U><FONT 
      color=#0000ff>you</FONT></U> use 
      lpReserved<BR><BR> UNREFERENCED_PARAMETER( lpReserved 
      );<BR><BR> //说明:lpReserved是一个被系统所保留的参数,对于隐式链接是一个非零值,对于显式链接值是零<BR><BR> if 
      (dwReason == DLL_PROCESS_ATTACH)<BR> {<BR>  TRACE0( "EXTDLL.DLL 
      Initializing!\n" );<BR>  // Extension DLL one-time initialization<BR>  if 
      ( !AfxInitExtensionModule( ExtDllDLL, hInstance ))<BR>   return 
      0;<BR>   // Insert this DLL into the resource chain<BR>  new 
      CDynLinkLibrary( ExtDllDLL );<BR> }<BR> else if (dwReason == 
      DLL_PROCESS_DETACH)<BR> {<BR>  TRACE0( "EXTDLL.DLL Terminating!\n" 
      );<BR>  // Terminate the library before destructors are 
      called<BR>  AfxTermExtensionModule( ExtDllDLL );<BR> }<BR> return 1; // 
      ok<BR>}</TD></TR></TBODY></TABLE><BR>  这一段代码含义晦涩,我们需要对其进行解读:<BR><BR>  (1)上述代码完成MFC扩展DLL的初始化和终止处理;<BR><BR>  (2)初始化期间所创建的 
CDynLinkLibrary 对象使MFC扩展 DLL 可以将 DLL中的CRuntimeClass 
对象或资源导出到应用程序;<BR><BR>  (3)AfxInitExtensionModule函数捕获模块的CRuntimeClass 结构和在创建 
CDynLinkLibrary 对象时使用的对象工厂(COleObjectFactory 
对象);<BR><BR>  (4)AfxTermExtensionModule函数使 MFC 得以在每个进程与扩展 DLL 
分离时(进程退出或使用AfxFreeLibrary卸载DLL时)清除扩展 DLL;<BR><BR>  (5)第一条语句static 
AFX_EXTENSION_MODULE ExtDllDLL = { NULL, NULL 
};定义了一个AFX_EXTENSION_MODULE类的静态全局对象,AFX_EXTENSION_MODULE的定义如下:<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
  <TBODY>
  <TR>
    <TD>struct AFX_EXTENSION_MODULE<BR>{<BR> BOOL bInitialized;<BR> HMODULE 
      hModule;<BR> HMODULE hResource;<BR> CRuntimeClass* 
      pFirstSharedClass;<BR> COleObjectFactory* 
  pFirstSharedFactory;<BR>};</TD></TR></TBODY></TABLE><BR>  由AFX_EXTENSION_MODULE的定义我们可以更好的理解(2)、(3)、(4)点。<BR><BR>  在资源编辑器中添加一个如图15所示的对话框,并使用MFC类向导为其添加一个对应的类CExtDialog,系统自动添加了ExtDialog.h和ExtDialog.cpp两个头文件。<BR><BR>
<TABLE width="90%" align=center border=0>
  <TBODY>
  <TR>
    <TD>
      <DIV align=center><IMG 
      src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/20060829153907816.gif" 
      border=0><BR>图15 
MFC扩展DLL中的对话框</DIV></TD></TR></TBODY></TABLE><BR>  修改ExtDialog.h中CExtDialog类的声明为:<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
  <TBODY>
  <TR>
    <TD>class AFX_EXT_CLASS CExtDialog : public 
      CDialog<BR>{<BR> public:<BR>  CExtDialog( CWnd* pParent = NULL ); 
      <BR>  enum { IDD = IDD_DLL_DIALOG };<BR> protected:<BR>  virtual void 
      DoDataExchange( CDataExchange* pDX ); 
  <BR>  DECLARE_MESSAGE_MAP()<BR>};</TD></TR></TBODY></TABLE><BR>  这其中最主要的改变是我们在class 
AFX_EXT_CLASS 
CExtDialog语句中添加了“AFX_EXT_CLASS”宏,则使得DLL中的CExtDialog类被导出。<BR><STRONG>6.3 
MFC扩展DLL的加载<BR><BR></STRONG>  6.3.1 
隐式加载<BR><BR>  我们在6.2工程所在的工作区中添加一个LoadExtDllDlg工程,用于演示MFC扩展DLL的加载。在LoadExtDllDlg工程中添加一个如图16所示的对话框,这个对话框上包括一个“调用DLL”按钮。<BR><BR>
<TABLE width="90%" align=center border=0>
  <TBODY>
  <TR>
    <TD>
      <DIV align=center><IMG 
      src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/20060829153915316.gif" 
      border=0><BR>图16 
MFC扩展DLL调用工程中的对话框</DIV></TD></TR></TBODY></TABLE><BR>  在与图16对应对话框类实现文件的头部添加:<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
  <TBODY>
  <TR>
    <TD>// LoadExtDllDlg.cpp : implementation file<BR>//<BR><BR>#include 
      "..\ExtDialog.h"<BR>#pragma comment( lib, "ExtDll.lib" 
      )<BR><BR>而“调用DLL”按钮的单击事件的消息处理函数为:<BR><BR>void 
      CLoadExtDllDlg::OnDllcallButton() <BR>{<BR> CExtDialog 
      extDialog;<BR> extDialog.DoModal();<BR>}</TD></TR></TBODY></TABLE>
<P><BR>  当我们单击“调用DLL”的时候,弹出了如图15的对话框。</P>
<P></P>
<P align=center><B><FONT color=red>[1]</FONT>&nbsp;<A 
href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdll/200608/1335_2.html">[2]</A>&nbsp;<A 
href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdll/200608/1335_3.html">[3]</A>&nbsp;<A 
href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdll/200608/1335_2.html">下一页</A> 
</B></P><BR>
<SCRIPT language=javascript 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/11.js"></SCRIPT>
</DIV>
<DIV id=Layer3></DIV>
<DIV id=list>
<LI>上一篇文章: <A class=LinkPrevArticle 
title="文章标题:VC++动态链接库编程之MFC规则DLL&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:未知&#13;&#10;更新时间:2006-8-29 15:33:19" 
href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdll/200608/1334.html">VC++动态链接库编程之MFC规则DLL</A><BR>
<LI>下一篇文章: <A class=LinkNextArticle 
title="文章标题:VC++动态链接库编程之DLL典型实例&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:未知&#13;&#10;更新时间:2006-8-29 15:53:04" 
href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdll/200608/1336.html">VC++动态链接库编程之DLL典型实例</A></LI></DIV>
<DIV id=Layer3>相关<B>文章</B></DIV>
<DIV id=CorrelativeArticle>
<TABLE cellSpacing=0 cellPadding=0 width=500 border=0>
  <TBODY>
  <TR>
    <TD><A class=LinkArticleCorrelative 
      title="文章标题:VC++开发的应用技巧三则&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名&#13;&#10;更新时间:2007-2-18 14:45:57" 
      href="http://www.longtengwang.com/Article/soft/VC/VCJQ/200702/5324.html" 
      target=_self>VC++开发的应用技巧三则</A><BR><A class=LinkArticleCorrelative 
      title="文章标题:Visual&nbsp;C++中用ADO进行数据库编程&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名&#13;&#10;更新时间:2007-1-6 21:49:21" 
      href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5022.html" 
      target=_self>Visual&nbsp;C++中用ADO进行数据库编程</A><BR><A 
      class=LinkArticleCorrelative 
      title="文章标题:VC6.0中使用ADO操作Access数据库&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名&#13;&#10;更新时间:2007-1-6 21:46:48" 
      href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5021.html" 
      target=_self>VC6.0中使用ADO操作Access数据库</A><BR><A class=LinkArticleCorrelative 
      title="文章标题:Visual&nbsp;C++中的ODBC编程实例&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名&#13;&#10;更新时间:2007-1-6 21:45:19" 
      href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5020.html" 
      target=_self>Visual&nbsp;C++中的ODBC编程实例</A><BR><A 
      class=LinkArticleCorrelative 
      title="文章标题:VC++实现ODBC数据源设置&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名&#13;&#10;更新时间:2007-1-6 21:44:42" 
      href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5019.html" 
      target=_self>VC++实现ODBC数据源设置</A><BR><A class=LinkArticleCorrelative 
      title="文章标题:VC++中调用ADO的常用方法&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名&#13;&#10;更新时间:2007-1-6 21:43:21" 
      href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5018.html" 
      target=_self>VC++中调用ADO的常用方法</A><BR><A class=LinkArticleCorrelative 
      title="文章标题:Visual&nbsp;C++&nbsp;ADO数据库编程入门&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名&#13;&#10;更新时间:2007-1-6 21:39:29" 
      href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5017.html" 
      target=_self>Visual&nbsp;C++&nbsp;ADO数据库编程入门</A><BR><A 
      class=LinkArticleCorrelative 
      title="文章标题:vc数据库编程中CRecordView类简介&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名&#13;&#10;更新时间:2007-1-6 21:38:27" 
      href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5016.html" 
      target=_self>vc数据库编程中CRecordView类简介</A><BR><A class=LinkArticleCorrelative 
      title="文章标题:Visual&nbsp;C++数据库编程--CDatabase类&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名&#13;&#10;更新时间:2007-1-6 21:33:45" 
      href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5015.html" 
      target=_self>Visual&nbsp;C++数据库编程--CDatabase类</A><BR><A 
      class=LinkArticleCorrelative 
      title="文章标题:Visual&nbsp;C++数据库编程--CRecordSet类&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:佚名&#13;&#10;更新时间:2007-1-6 21:32:38" 
      href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5014.html" 
      target=_self>Visual&nbsp;C++数据库编程--CRecordSet类</A><BR></TD>
    <TD width=250></TD></TR></TBODY></TABLE></DIV></DIV>
<DIV id=right><A href="http://adultfriendfinder.com/go/g845781-pmem" 
target=_top><IMG height=60 src="" width=234 border=0></A> 
<DIV id=c1>最新教程</DIV>
<DIV id=c2><IMG alt=普通文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_common6.gif">&nbsp;<A class="" 
title=ASP.NET2.0技巧实现主页嵌套 
href="http://www.longtengwang.com/Article/wlbc/aspnet/aspnetjq/200703/5422.html" 
target=_self>ASP.NET2.0技巧实现主页嵌套</A><IMG alt=最新文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/new.gif"><BR><IMG alt=普通文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_common6.gif">&nbsp;<A class="" 
title=利用Flash&nbsp;8.0制作精致图标 
href="http://www.longtengwang.com/Article/donghua/flash/shilie/200703/5421.html" 
target=_self>利用Flash&nbsp;8.0制作精致图标</A><IMG alt=最新文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/new.gif"><BR><IMG alt=普通文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_common6.gif">&nbsp;<A class="" 
title=JavaScript&nbsp;和&nbsp;Flash&nbsp;间的通信技巧 
href="http://www.longtengwang.com/Article/wlbc/javascript/shilie/200703/5420.html" 
target=_self>JavaScript&nbsp;和&nbsp;Flash&nbsp;间的通信技</A><IMG alt=最新文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/new.gif"><BR><IMG alt=普通文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_common6.gif">&nbsp;<A class="" 
title=Javascript实现页内查找关键词实例 
href="http://www.longtengwang.com/Article/wlbc/javascript/shilie/200703/5419.html" 
target=_self>Javascript实现页内查找关键词实</A><IMG alt=最新文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/new.gif"><BR><IMG alt=普通文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_common6.gif">&nbsp;<A class="" 
title=CorelDraw输出打印PostScript文件 
href="http://www.longtengwang.com/Article/tuxiangchuli/Coreldraw/CorelDRAWjq/200703/5418.html" 
target=_self>CorelDraw输出打印PostScript文件</A><IMG alt=最新文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/new.gif"><BR><IMG alt=普通文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_common6.gif">&nbsp;<A class="" 
title=Java的中文编程配置心得 
href="http://www.longtengwang.com/Article/soft/JAVA/JAVAJC/200703/5417.html" 
target=_self>Java的中文编程配置心得</A><IMG alt=最新文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/new.gif"><BR><IMG alt=普通文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_common6.gif">&nbsp;<A class="" 
title=Word&nbsp;2007制作发文件用的方格稿纸 
href="http://www.longtengwang.com/Article/hangyesoft/caiwuguanli/office/Word/200703/5416.html" 
target=_self>Word&nbsp;2007制作发文件用的方格稿纸</A><IMG alt=最新文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/new.gif"><BR><IMG alt=普通文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_common6.gif">&nbsp;<A class="" 
title=让网际快车变得自动听话 
href="http://www.longtengwang.com/Article/wangluo/xiazai/flashget/200703/5415.html" 
target=_self>让网际快车变得自动听话</A><IMG alt=最新文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/new.gif"><BR><IMG alt=普通文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_common6.gif">&nbsp;<A class="" 
title=拯救eMule电骡的劳动成果 
href="http://www.longtengwang.com/Article/wangluo/xiazai/eMule/200703/5414.html" 
target=_self>拯救eMule电骡的劳动成果</A><IMG alt=最新文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/new.gif"><BR><IMG alt=普通文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_common6.gif">&nbsp;<A class="" 
title=防止IE被恶意修改的技巧 
href="http://www.longtengwang.com/Article/wangluo/liulan/IE/200703/5413.html" 
target=_self>防止IE被恶意修改的技巧</A><IMG alt=最新文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/new.gif"><BR></DIV>
<DIV id=c1>推荐教程</DIV>
<DIV id=c2><IMG alt=推荐文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_elite6.gif">&nbsp;<A class="" 
title=利用Nero制作VCD图解教程 
href="http://www.longtengwang.com/Article/duomeit/guangpangl/nero/200702/5367.html" 
target=_self>利用Nero制作VCD图解教程</A><BR><IMG alt=推荐文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_elite6.gif">&nbsp;<A class="" 
title=Illustrator制作春天花朵矢量图 
href="http://www.longtengwang.com/Article/tuxiangchuli/Illustrator/shilie/200702/5356.html" 
target=_self>Illustrator制作春天花朵矢量图</A><BR><IMG alt=推荐文章 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_elite6.gif">&nbsp;<A class="" 
title=AutoCAD高级技巧大全 
href="http://www.longtengwang.com/Article/ddzhizuo/AUTOCAD/cadjq/200702/5307.html" 
target=_self>AutoCAD高级技巧大全</A><BR></DIV>
<P style="WIDTH: 200px">
<SCRIPT language=javascript 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/1.js"></SCRIPT>
</P></DIV></DIV>
<DIV id=foot>
<TABLE cellSpacing=0 width=1000 bgColor=#ffffff border=0>
  <TBODY>
  <TR>
    <TD bgColor=#ff0000 height=20>
      <DIV align=center><A class=Bottom 
      onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://longtengwang.com');" 
      href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdll/200608/1335.html#">设为首页</A> 
      | <A class=Bottom 
      href="javascript:window.external.addFavorite('http://longtengwang.com','龙腾软件教程网');">加入收藏</A> 
      | <A class=Bottom href="mailto:3671041@163.com">联系站长</A> | <A class=Bottom 
      href="http://www.longtengwang.com/FriendSite/Index.asp" 
      target=_blank>友情链接</A> | <A class=Bottom 
      href="http://www.longtengwang.com/Copyright.asp" 
      target=_blank>版权申明</A></DIV></TD></TR>
  <TR>
    <TD vAlign=top height=100>
      <DIV align=center>
      <P align=center>版权所有2006-2008 龙腾教程网</P>
      <P align=center>&nbsp;</P>
      <P>
      <SCRIPT language=JavaScript 
      src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/stat.htm" 
charset=gb2312></SCRIPT>
      </P></DIV></TD></TR></TBODY></TABLE></DIV>
<SCRIPT language=javascript 
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/9.js"></SCRIPT>
</BODY></HTML>

⌨️ 快捷键说明

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