体验Visual C++ 2005的现代语言特性(2)2007-05-14 天极 谢启东编…新的Interop
在Visual Studio .NET 2003的所有基于 .NET Framework的语言当中,Visual C++ 2005提供了最好的interop功能。它可不像是纸上谈兵,如今具有了足够的能力来实现真实世界中的场景,一个最好的例子就是把Quake II移植到 .NET Framework平台上,而Visual C++ 2005则更加扩展了这项功能。
对C++开发者来说,以上的结果还涉及到更多的方面,其中一个,就是在Visual Studio .NET 2002和Visual Studio .NET 2003中声名狼藉的混合DLL加载问题。如果你在加载器锁(loader lock)中运行本地代码,但又引用了程序集中一个未被加载的托管类型,此时,CLR会调用LoadLibrary来加载这个程序集。LoadLibrary会试图取得加载器锁,在这一点上,造成了程序死锁。而这个问题,在新版本的Visual Studio中,已经解决了。
此外,Visual Studio .NET 2003只在极少数情况下,能生成可验证代码,即使生成了,也需花一大番气力。然而,MSIL对不可验证指令提供了第一类的支持(指针算法、间接加载、访问本地堆),可验证代码也使你可参与到可信赖计算中,反过来,也极大地丰富了Visual Studio 2005的功能。单击部署基于局部可信赖计算,就像托管代码宿于SQL Server 2005中一样。Visual C++ 2005开发小组一个主要目标,就是使编译器可生成非混合及可验证映像,为此引入了两个新的编译器选项:/clr:pure和/clr:safe,但在研究这两个新选项之前,还需要弄清楚C++ interop是怎样工作的。