我遇到了一个需要根据操作系统更改我正在使用的DLL Import语句的情况。我想知道是否有其他人观察到这一点,知道原因,或者是否有更好的方法来解决这个问题。
这是显示问题的最小代码段。它是一个简单的命令行应用程序,只输出shift键的状态。
using System;
using System.Runtime.InteropServices;
namespace Shift
{
class Program
{
[DllImport("user32.dll", SetLastError = true)]
public static extern short GetAsyncKeyState(ushort virtualKeyCode);
static void Main(string[] args)
{
Console.WriteLine("Shift is: " + GetAsyncKeyState(0x10));
}
}
}
在Windows 8.1 x64上运行或构建为32位并在Windows 7 x64上运行时,上述工作正常。但是,在为x64编译时,它不适用于Windows 7系统。在这种情况下,GetAsyncKeyState始终返回0.
如果我将DLLImport更改为以下版本,那么在为x64编译时,它将在Windows 7系统上运行。
[DllImport("user32.dll", SetLastError = true)]
public static extern short GetAsyncKeyState(int virtualKeyCode);