处理Pinvoke用于32位和64位DLL

时间:2014-09-12 07:06:57

标签: c# dll pinvoke 32bit-64bit

我尝试开发一个使用USB硬件设备的C#接口。我从制造商处访问API DLL Via PInvoke模式。 有两个具有相同名称的DLL。但一个用于32位系统,另一个用于64位系统。 我希望我的应用程序为每个系统使用正确的API。

所以我开始检查正在使用的平台:

bool is64Bit = System.Environment.Is64BitOperatingSystem

我定义了一个字符串变量并设置了推荐.DLL的名称。

像这样:

string dll;
if (is64bit)
{
    dll = "APINAME64.DLL";
}
else
{
    dll = "APINAME32.DLL"
}
[DllImport(dll, SetLastError=true)]
public static extern bool ImmConfigureIME();

但这仍然无效。编译器需要一个用于Pinvoke的const字符串。

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以在代码中声明两个DLL并为它们指定不同的名称。然后,使用EntryName属性确保它们具有本机dll的正确入口点:

[DllImport("APINAME64.dll", EntryName="ImmConfigureIME" SetLastError=true)]
public static extern bool ImmConfigureIME64();

[DllImport("APINAME32.dll", EntryName="ImmConfigureIME" SetLastError=true)]
public static extern bool ImmConfigureIME32();

bool is64Bit = System.Environment.Is64BitOperatingSystem;
if (is64bit)
{
    ImmConfigureIME64();
}
else
{
    ImmConfigureIME32();
}