我对以下测试问题的可能答案有一些疑问:
问题:您编写以下代码段以使用平台调用从 Win32 应用程序编程接口 (API) 调用函数。
string personName = "N?el";
string msg = "Welcome" + personName + "to club"!";
bool rc = User32API.MessageBox(0, msg, personName, 0);
您需要定义一个可以最好地编组字符串数据的方法原型。您应该使用哪个代码段?
// A.
[DllImport("user32", CharSet = CharSet.Ansi)]
public static extern bool MessageBox(int hWnd, string text, string caption, uint type);
}
// B.
[DllImport("user32", EntryPoint = "MessageBoxA", CharSet = CharSet.Ansi)]
public static extern bool MessageBox(int hWnd,
[MarshalAs(UnmanagedType.LPWStr)]string text,
[MarshalAs(UnmanagedType.LPWStr)]string caption, uint type);
}
// C. - Correct answer
[DllImport("user32", CharSet = CharSet.Unicode)]
public static extern bool MessageBox(int hWnd, string text, string caption, uint type);
}
// D.
[DllImport("user32", EntryPoint = "MessageBoxA", CharSet = CharSet.Unicode)]
public static extern bool MessageBox(int hWnd,
[MarshalAs(UnmanagedType.LPWStr)]string text,
[MarshalAs(UnmanagedType.LPWStr)]string caption,
uint type);
}
为什么正确答案是 C?难道不是A也一样吗?唯一的区别是它将是 ANSI 而不是 Unicode。
我知道它不可能是 D,因为我们选择 Unicode 作为字符集,然后将 ANSI 函数作为入口点。
为什么B不工作?