.NET FrameWork代码的64位移植及与Native代码的交互
一 .NET Framework代码的移植
使用.NET Framework的各种语言编写的代码,通过各种语言对应的编译器,最后都生成为IL中间语言代码,而这样中间语言是
与CPU的架构无关的,当IL中间语言在各种CPU上面的执行时才生成Native的CPU直接执行的指令。IL代码是在CLR通用语言运行时中执
行的,所以我们也称.NET Framework编写的代码为Managed托管代码。正是由于.NET Framework的这种运行机制,使得由.NET
Framework编写的代码,几乎不用改写代码就可以移植到64位系统上。
1) 大部分存在的托管应用无需重新编译,便可以直接在32位和64位上工作。
2) 在32位系统上的pe文件格式在新的64位中稍有改变,表示位pe+。
3) Framework 1.0,1.1的代码作为32位在64位的WOW64上运行,Framework 2.0的代码在64位上作为64位直接运行。
4) 如果是只有托管代码,则可以编译为Any cpu (还有x86,x64,ipf),可以在x86,x64,ipf上运行。
二 托管代码与Native代码的互调用的移植
1)32位和64位的代码不能在同一进程中执行 :由于可以使用的内存大小不同,所使用的页文件大小不同。
2)如果有32位和64位的互调用,则统一都移植为64位。
3)也可以通过进程外互操作实现32位和64位的互调用。
4)几种互操作实现技术:COM依赖;Win32依赖;使用代理进程技术(dllhost.exe)。
三 32位在64位上的执行
像我们的32位系统上可以执行16位的程序一样,在64位的系统上也提供了向后兼容32位程序。在64位的系统上使用WOW64提
供对32位的支持,但是不再支持16位程序的运行。大部分32位应用程序能够运行在WoW64中,具有在原生Windows 32位上几乎相同的
特性。
1)WoW64如何工作:WoW64从32位应用程序截取系统调用; 转变为64位模式; 将32位数据结构转换为64位对齐结构;发出原生64位系
统调用;从64位系统调用写回任何输出数据;返回到32位模式。
2) 图示WOW64的调用和执行过程:
上图为调用过程,下面是执行过程:
最后大家好运!有兴趣的可以继续学习sql的64位移植,在微软的webcast网站。