C#如何判断系统是32位还是64位,然后去DllImport 不同版本的dll,谢谢了。

解决方案 »

  1.   

    判断系统是否是64位的方法有很多。对于C#来说,调用WMI是一种简单易行的方式。我们可以用Win32_Processor类里面的AddressWidth属性来表示系统的位宽。AddressWidth的值受CPU和操作系统的双重影响。具体的值如下面的表格所示:32bit OS 64bit OS
    32bit CPU AddressWidth = 32 N/A
    64bit CPU AddressWidth = 32 AddressWidth = 64
      

  2.   

    也可以判断IntPtr.Size的值,如果是4就是32位,8就是64位
      

  3.   

    这个判断系统的我知道,主要是如何判断完之后再去加载不同版本的dll?[DllImport]应该是预编译,在没有执行上述代码的时候就已经加载完了.....
      

  4.   

    你可以两个都import但是代码段里判断后再进行不同调用
      

  5.   

    try
                {
                    string addressWidth = String.Empty;
                    ConnectionOptions mConnOption = new ConnectionOptions();
                    ManagementScope mMs = new ManagementScope(@"\\localhost", mConnOption);
                    ObjectQuery mQuery = new ObjectQuery("select AddressWidth from Win32_Processor");
                    ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(mMs, mQuery);
                    ManagementObjectCollection mObjectCollection = mSearcher.Get();
                    foreach (ManagementObject mObject in mObjectCollection)
                    {
                        addressWidth = mObject["AddressWidth"].ToString();
                    }
                    return Int32.Parse(addressWidth);
                }
                catch (Exception ex)
                {
                    return 32;
                }
    如果是4就是32位,8就是64位。[DllImport("kernel32.dll")] 这样引入不同版本的DLL。
    private static extern void 函数名(参数,[参数]); 
    函数名就是一个属于kernel32.dll里的一个函数。完了你就可以用那个函数了。kernel32.dll调用kernel32.dll这个DLL里面的API接口系统API 
    例如 
    [DllImport("user32.dll")]//--引入API 
    public static extern ReturnType FunctionName(type arg1,type arg2,...);//--声明方法 
      

  6.   

    如果dll同名,那就简单了,安装的时候放版本正确的dll就可以了。如果不同名,可以用两个DllImport
    [DllImport("My64.dll", EntryPoint="ABC")]
    extern static void ABC64();[DllImport("My32.dll", EntryPoint="ABC")]
    extern static void ABC32();
      

  7.   

    那样的话,两个dll的名字要不同,而且函数名也要改了,有没有办法像C++里面有_WIN64的宏一样,#ifdef _WIN64就可以加载不同的dll了呢
      

  8.   

    dll版本同名,但是怎么先判断系统是多少位然后再加载不同的dll?也就是说在64位机上自己加载64位的dll,32位机上自己加载32的dll? 谢谢了
      

  9.   

    额...我是要根据判断出来的多少位系统去加载不同版本的dll....
      

  10.   

    你的意思是根据判断出来多少位然后
    if(是64位){[DLLImport("64.dll")]}else {[DLLImport("32.dll")]}吗??
      

  11.   

    额....[DLLImport("")]在没执行上面的判断之前就已经加载dll了,而且它在函数体内是用不了的,有什么办法解决吗?
      

  12.   

    大神还在吗,两个版本,相同名字的dll,放在不同的目录里,让代码去判断是多少位的系统后自己加载对应目录下dll,请问C#可以实现吗