代码之家  ›  专栏  ›  技术社区  ›  Thorsten Dittmar

C#:根据平台访问32位/64位DLL

  •  5
  • Thorsten Dittmar  · 技术社区  · 16 年前

    我的问题是:有没有一种方法可以使用32位的DLL?如果不是,如果我创建了一个64位版本的DLL,是否可以让应用程序选择P/Invoke到哪个版本?

    我正在考虑在C#中创建两个助手类:一个从32位DLL导入函数,另一个从64位DLL导入函数,然后为每个导入的函数创建一个包装类,根据操作系统的“位性”调用32位导入器或64位导入器。这样行吗?

    还是有其他简单的方法?

    4 回复  |  直到 16 年前
        1
  •  6
  •   Reed Copsey    16 年前

    在64位中编译时,需要确保仅对64位DLL使用P/Invoke调用。

    一种选择是将所有“方法”移动到标准接口(或抽象基类)中,并提供两个实现,一个32位和一个64位。您可以让工厂方法根据IntPtr的大小构造适当的类实例。

    这允许“AnyCPU”应用程序在运行时正确地确定要P/调用到哪个DLL,并且确实可以工作。

        2
  •  3
  •   Chris Almond    15 年前

    创建一个包装64位和32位DLL的助手类,并使用IntPtr.Size来确定要调用哪个。

    if (IntPtr.Size == 8)
    {
        Helper.SomeMethod64();
    }
    else
    {
        Helper.SomeMethod32();
    }
    
        3
  •  1
  •   Rowland Shaw    16 年前

    您可以将.Net应用程序标记为仅针对x86体系结构

        4
  •  1
  •   MadBoy    16 年前

    我也有类似的问题,但是unrr.dll不是32位就是64位。

    有两种方法可以使其工作:

    (一)

    #if x64
    // ... define all x64 imports here
    #else
    // ... define all x86 imports here
    #endif
    

    编译32位和64位的应用程序。

    (二) 另一种方法是为导入创建接口,并分别实现32位和64位版本。

    推荐文章