csdn_文档中心_托管代码和非托管代码互操作无边界.htm
来自「csdn10年中间经典帖子」· HTM 代码 · 共 317 行 · 第 1/2 页
HTM
317 行
</SCRIPT>
</B> </TD></TR>
<TR bgColor=#999999>
<TD colSpan=3 height=1></TD></TR></TBODY></TABLE>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD align=middle bgColor=#fafafa class=td1 vAlign=top width=150><BR>
<SCRIPT src="CSDN_文档中心_托管代码和非托管代码互操作无边界.files/microsoft.js"></SCRIPT>
</TD>
<TD align=middle width=620>
<TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
<TBODY>
<TR bgColor=#ffffff>
<TD align=middle height=10 width=50></TD>
<TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A
href="http://www.csdn.net/develop/">文档中心</A> - <FONT
color=#003399>Visual C++</FONT> </TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>标题</FONT></TD>
<TD><B> 托管代码和非托管代码互操作无边界</B> BrianLiang(原作)
</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
<TD width=500> 托管 非托管 互操作 UserControl</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR>
<P>托管代码和非托管代码互操作无边界<BR>Brian Liang (原创)<BR><A
href="mailto:mynewbigame@tom.com">mynewbigame@tom.com</A><BR>当你手中有很多资源,你希望借助他们完成你手头的工作;你想让它们整合在一起协同工作而且运行良好;你要充分发挥想象力并且充分利用到每一个个体的长处摒弃他们的短处;你了解每一个成员的特性,他们每一个都可以独当一面,在特定的场合干地非常漂亮;你把他们组织在一起,然后问题来了。<BR>他们圆满地完成的各自的工作,但他们的工作成果不能够相互利用,不能交互协作,你没有办法让他们沟通。<BR>传统的MFC程序员和时髦的.NET程序员现在就遇到了这样的问题。托管和非托管对象模型的数据类型、方法签名、错误处理机制有很大的不同,给两者之间的互操作增加了很多障碍。一直以来,如何使.NET
Framework
组件和非托管代码之间交互操作的话题被不断提出,很多程序员都参与了讨论。当然由于创新原则的要求,这种人为的技术鸿沟无法填平,实际上我们需要的也仅仅是能让他们自如的进行沟通。看看MFC
Application Project with .NET Support 1.0
(以下简称MFC.NET)能为我们做的事情。<BR>安装完成MFC.NET之后,您会发现在您的Visual Studio.NET
2003 (此工具只能安装在VS.NET2003即7.1版本上)“新建工程-Visual C++工程”的模板里多了一项:“MFC
Application with .NET Support”;里面的选项和常规的“MFC
Application”一样。但生成的项目内容去有所不同,增加了"CuserControl
”类。<BR>用一个简单的例子开始吧。这个例子演示了使用托管UserControl作为MFC项目的视图显示。右键项目名称(假设名字为demo1),增加新项,选择”UserControl
(.NET)”, 输入名称” myUserControl”;在解决方案管理器中双击”
myUserControl.h”就可以编辑它的内容。我们可以随意的增加.NET控件。比如增加按钮。增加点击响应事件:”AfxMessageBox(_T("Hello,
.NET world!"));”;然后,把”demo1.cpp”的以下代码<BR>pDocTemplate = new
CMultiDocTemplate(IDR_ demo1TYPE, RUNTIME_CLASS(Cdemo1Doc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(C demo1View)); <BR>改为:<BR>pDocTemplate = new
CMultiDocTemplate(IDR_ demo1TYPE, RUNTIME_CLASS(C demo1Doc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CUserControlView)); <BR>最后一步,把”UserControlView.cpp”中的m_strWinCtrlID
= theApp.m_strCurUserControlID;改为theApp.m_strCurUserControlID =
_T("demo1.demo1. myUserControl");<BR>m_strWinCtrlID =
theApp.m_strCurUserControlID;<BR>打完收工。编译运行,看看效果。</P>
<P>第二个例子:<BR>这个例子演示了如何在MFC项目中插入的UserControl调用另外一个VB.NET项目中的方法;<BR>新建“MFC
Application with .NET
Support”解决方案(名为demo1),插入UserControl(名为myUserControl);新增VB.NET项目,选择ClassLibrary(名为testCL);在testCL中增加新类(名为newClass);在newClass中增加函数(名为testMethod):<BR>Public
Sub testMethod()
MsgBox("Hi,there!") End
Sub <BR>除了要做例一的更改外,我们必须为新增的ClassLibrary增加引用,方法为“右键解决方案管理器中的MFC工程引用标签,选择新引用,然后选择testCL双击,确定”;双击”myUserControl.h”编辑它,增加按钮,双击按钮增加按钮事件:<BR>testCL::newClass*
myc=new testCL::newClass(); myc->testMethod(); </P>
<P>打完收工,编译测试。<BR>注意:有时候直接编译运行会出现“找不到程序集或依赖项”错误,只需要重新编译解决方案/项目即可。</P>
<P>附:MFC Application Project with .NET Support 1.0 简介<BR>MFC
Application Project with .NET Support
1.0是一个非常灵活的工具,可以帮助我们在非托管MFC项目中使用托管资源。关于托管和非托管互操作的讨论网上又很多,但没有一个成为产品的解决方案。在国内外的技术站点上,我都没有发现比这个更为强大的工具。使用这个工具,可以在非托管C++中创建托管C++
usercontrol从而使用到所有的托管控件;非托管代码也可以动态创建由其他语言写的(如VB.NET,VC#)usercontrol;非托管C++代码可以响应托管控件的事件,也可以调用用托管代码写成的函数等等;总之,这个工具完全可以满足任何非托管和托管代码互操作的要求,成为开发者/构架师进行资源整合、提高开发效率的好帮手。<BR>下载地址:<A
href="http://www.apptemplate.com/DownFiles/setup.zip">http://www.apptemplate.com/DownFiles/setup.zip</A><BR>实例下载地址:<A
href="http://www.apptemplate.com/GB/downloads/">http://www.apptemplate.com/GB/downloads/</A><BR>官方网站:<A
href="http://www.apptemplate.com/">http://www.apptemplate.com/</A></P>
<P><BR>Brian
Liang<BR>2004-4</P><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0
width=770>
<TBODY>
<TR bgColor=#006699>
<TD align=middle bgColor=#006699 id=white><FONT
color=#ffffff>对该文的评论</FONT></TD>
<TD align=middle>
<SCRIPT src="CSDN_文档中心_托管代码和非托管代码互操作无边界.files/readnum.htm"></SCRIPT>
</TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_托管代码和非托管代码互操作无边界.files/ico_pencil.gif" width=16>
</SPAN> mig15 <I>(2004-4-28 15:04:16)</I> </TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>得到的远比付出的少...
<BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_托管代码和非托管代码互操作无边界.files/ico_pencil.gif" width=16>
</SPAN> windcbf <I>(2004-4-20 12:39:00)</I> </TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>关注 <BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_托管代码和非托管代码互操作无边界.files/ico_pencil.gif" width=16>
</SPAN> BrianLiang <I>(2004-4-13 15:29:23)</I>
</TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>似乎没人关注!
<BR></TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TH bgColor=#006699 id=white><FONT
color=#ffffff>我要评论</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD>你没有登陆,无法发表评论。 请先<A
href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=26683">登陆</A>
<A
href="http://www.csdn.net/expert/zc.asp">我要注册</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
<TBODY>
<TR align=middle>
<TD height=10 vAlign=bottom><A
href="http://www.csdn.net/intro/intro.asp?id=2">网站简介</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=5">广告服务</A> - <A
href="http://www.csdn.net/map/map.shtm">网站地图</A> - <A
href="http://www.csdn.net/help/help.asp">帮助信息</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=2">联系方式</A> - <A
href="http://www.csdn.net/english">English</A> </TD>
<TD align=middle rowSpan=3><A
href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG
border=0 height=48 src="CSDN_文档中心_托管代码和非托管代码互操作无边界.files/biaoshi.gif"
width=40></A></TD></TR>
<TR align=middle>
<TD vAlign=top>百联美达美公司 版权所有 京ICP证020026号</TD></TR>
<TR align=middle>
<TD vAlign=top><FONT face=Verdana>Copyright © CSDN.net, Inc. All rights
reserved</FONT></TD></TR>
<TR>
<TD height=15></TD>
<TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--内容结束//--><!--结束//--></BODY></HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?