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

理论上,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 位的
posted on 2006-11-02 23:15  Jason.NET  阅读(3664)  评论(11编辑  收藏  举报