选择显示字体大小

visual c++ 2005中混合代码的初始化


  在 visual studio .net 2003 中初始化混合dlls很麻烦,需要手工干预。但在 visual studio 2005 中,visual c++ 和 clr 团队设计了一种新的初始化模型,这种新模型更简单,更自动化。

  visual studio .net 2003 的根本问题在于将本地代码和托管代码一起置于单“池”中。dllmain 期间该池的运行是不安全的,托管代码根本就不能在这里运行。

  新的模型将静态初始化汇集在两个单独的池中。一个池负责本地的静态初始化;另一个负责托管代码的初始化。

  第一个池在 dllmaincrtstartup 期间进行初始化,就像本地代码那样。第二个池的初始化,我们加入了一个新的托管代码初始化阶段。当某个包含托管代码的模块被加载到应用程序域(appdomain)时,clr 将会在任何托管代码运行之前运行一个特殊的.cctor 函数(我们把它叫做“模块构造函数”)。

  托管c运行时(msvcmrt.lib)包含一个模块构造函数,由它负责初始化第二个池。同时它还安装一个应用程序域的 unload 事件来运行托管静态析构函数和 exit 函数。

  这种新模型意味着到托管代码的迁移或添加托管代码到现有的应用程序将变得更加容易,因为不需要再添加定制的初始化入口点。迁移期间,你可能还会碰到本地代码调用托管代码的情况。你的代码要可靠地启动和关闭,必须解决这个问题才行。否则会出现 c 运行时库的r6031错误,或者在调试器下运行时出现 clr 警告。

  为了在 visual studio 2005 beta 2 或以后的版本中解决这个问题,使用调试器的调用堆栈(call stack)找到此烦人的函数,并将该函数要么移到某个头文件中,或者本地原文件中,以便将它编译成本地代码。你可能注意到了通过 #pragma managed 解决此类问题的建议。请尽量避免这种做法,用这种方法来解决这个问题非常难以凑效。尤其是在你具备自己的 dllmain 或 rawdllmain 时更是如此,此时必须保证将此函数放在本地代码集中。

  如果你采纳了保罗描述的解决方案,从 visual c++ 7.1 到 8.0 的迁移不会有太多麻烦。当你重新编译时,你会看到关于使用 _vcclrit.h 中函数的不满警告。此时删除对该文件的引用并进行手工初始化即可。为了完全恢复使用crt,你还应该从编译开关中去掉 /zl,从链接开关中去掉 /noentry。

  这是 visual studio 2005 中大量改动的地方之一,目的是方便将 c++ 应用程序迁移到托管代码使用环境。使用最新的生成产品,我们已经看到大量应用程序在相当短的时间内转移到了托管环境中。visual studio 2005 beta 2 出炉后用用看吧,并把使用情况反馈给我们。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons