📄 vc++动态链接库编程之mfc扩展 dll教程_龙腾教程网.htm
字号:
<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> <A
href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdll/200608/1335_2.html">[2]</A> <A
href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdll/200608/1335_3.html">[3]</A> <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 作 者:未知 更新时间: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典型实例 作 者:未知 更新时间: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++开发的应用技巧三则 作 者:佚名 更新时间: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 C++中用ADO进行数据库编程 作 者:佚名 更新时间:2007-1-6 21:49:21"
href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5022.html"
target=_self>Visual C++中用ADO进行数据库编程</A><BR><A
class=LinkArticleCorrelative
title="文章标题:VC6.0中使用ADO操作Access数据库 作 者:佚名 更新时间: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 C++中的ODBC编程实例 作 者:佚名 更新时间:2007-1-6 21:45:19"
href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5020.html"
target=_self>Visual C++中的ODBC编程实例</A><BR><A
class=LinkArticleCorrelative
title="文章标题:VC++实现ODBC数据源设置 作 者:佚名 更新时间: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的常用方法 作 者:佚名 更新时间: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 C++ ADO数据库编程入门 作 者:佚名 更新时间:2007-1-6 21:39:29"
href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5017.html"
target=_self>Visual C++ ADO数据库编程入门</A><BR><A
class=LinkArticleCorrelative
title="文章标题:vc数据库编程中CRecordView类简介 作 者:佚名 更新时间: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 C++数据库编程--CDatabase类 作 者:佚名 更新时间:2007-1-6 21:33:45"
href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5015.html"
target=_self>Visual C++数据库编程--CDatabase类</A><BR><A
class=LinkArticleCorrelative
title="文章标题:Visual C++数据库编程--CRecordSet类 作 者:佚名 更新时间:2007-1-6 21:32:38"
href="http://www.longtengwang.com/Article/soft/VC/quantao/vcdata/200701/5014.html"
target=_self>Visual 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"> <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"> <A class=""
title=利用Flash 8.0制作精致图标
href="http://www.longtengwang.com/Article/donghua/flash/shilie/200703/5421.html"
target=_self>利用Flash 8.0制作精致图标</A><IMG alt=最新文章
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/new.gif"><BR><IMG alt=普通文章
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_common6.gif"> <A class=""
title=JavaScript 和 Flash 间的通信技巧
href="http://www.longtengwang.com/Article/wlbc/javascript/shilie/200703/5420.html"
target=_self>JavaScript 和 Flash 间的通信技</A><IMG alt=最新文章
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/new.gif"><BR><IMG alt=普通文章
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_common6.gif"> <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"> <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"> <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"> <A class=""
title=Word 2007制作发文件用的方格稿纸
href="http://www.longtengwang.com/Article/hangyesoft/caiwuguanli/office/Word/200703/5416.html"
target=_self>Word 2007制作发文件用的方格稿纸</A><IMG alt=最新文章
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/new.gif"><BR><IMG alt=普通文章
src="VC++动态链接库编程之MFC扩展 DLL教程_龙腾教程网.files/article_common6.gif"> <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"> <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"> <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"> <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"> <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"> <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> </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 + -