我尝试开发一个使用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字符串。
有人知道如何解决这个问题吗?
答案 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();
}