【发布时间】:2014-11-06 07:11:58
【问题描述】:
我尝试开发一个用于使用 USB 硬件设备的 C# 接口。我通过制造商的 PInvoke 模式访问 API DLL。 有两个同名的 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 字符串。
有人知道如何解决这个问题吗?
【问题讨论】:
-
在检查它是否为 64 位后,您尝试过做什么?
-
我不确定我是否理解您的问题。如果您知道当前系统的位数,是什么阻止您加载正确的 dll?
-
@YuvalItzchakov 我编辑问题。
-
给它们相同的名称,这样您的 [DllImport] 声明就不必更改。只需重命名文件。然后你只需要帮助 Windows 找到正确的 DLL。这里有许多问题的主题。
标签: c# dll pinvoke 32bit-64bit