Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > C#.NET > DOTNET 32位下的程序在64位下真的可以运行吗?
【标  题】:DOTNET 32位下的程序在64位下真的可以运行吗?
【关键字】:DOTNET,32,64
【来  源】:http://www.cnblogs.com/Aiasted/archive/2006/11/02/548491.html

DOTNET 32位下的程序在64位下真的可以运行吗?

Your Ad Here 理论上,32位下编译过的DOTNET在64位下是可以运行的,因为虚拟机会帮你做转换。但,如果你编程的习惯不好,也有可能不能运行。

近来,在做64位开发,MAXTOCODE 要支持 64位平台和 Vista 嘛。发现一个问题,在32位环境下运行很正常的软件,在64位下运行却得不到正确的值。

如例:

  [DllImport("KERNEL32.DLL", EntryPoint="GetModuleHandleA", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
  private static extern int GetModuleHandle(string lpModuleName);

  如果你的调用是 int m_handle = GetMethodHandle("");

  这样的语句绝对会在 64 位获取不到正确的值。

  原因很简单, int 是 32 位的,而在 64位系统下,返回的地址是 00000000 00000000 的格式,系统会自动取基址,而抛弃了段址。

  所以,以后老老实实,开发定义都这样写吧

  [DllImport("KERNEL32.DLL", EntryPoint="GetModuleHandleA", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
  private static extern IntPtr GetModuleHandle(string lpModuleName);

  而且要改掉用 int 的习惯。。。 别把以前 WINDOWS的开发习惯带进来,特别是咱们喜欢用 VB。NET 的朋友, LONG 也是 32 位的
深入Atlas系列:探究Application Services(1) - Profile Service分析与使用:【上一篇】
从中性的bytes获取正确的编码(如windows自带的记事本):【下一篇】
【相关文章】
  • Scripting Languages 簡介
  • 在Solaris上编译32位和64位版本ACE
  • 编程交流与学习--More Effective C++的学习-Item M32:在未来时态下开发程序
  • run regsvr32.exe failed in Vista
  • DotNet 下的数据访问技术
  • DotNet(C#)学习-你学到什么程度!
  • 花两小时终于搞定了w32.stration.cx@MM
  • openSUSE 10.2 Beta1 (i386, x86-64) is available
  • pb与java、dotnet的webservice交互问题
  • MASM32编程获取文件语言、版本信息
  • 【随机文章】
  • Authorware中TTS引擎的使用
  • FOSS在印度
  • J2EE标准下BPR集成平台的实现(图)
  • 嵌套DIV:父DIV的高度不能根据子DIV自动变化的解决方案
  • 《神话》法师
  • 教你用FW做酷LOGO
  • 忘记mysql的root密码
  • 献给新手:Linux以及各大发行版介绍
  • Shine Framework V1.1.1023 (Open Source)
  • AP-500无线接入点
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.