.net - 我应该在 dllimport 中使用 Ansi 还是 Unicode 字符集?

标签 .net unicode pinvoke

当您使用 DllImport 导入函数时,您可以指定要使用的 CharSet。我注意到在 C#、C++ 和 Visual Basic 中,.Net 运行时默认为此使用 Ansi 而不是 Unicode。因此,对于具有 A 和 W 版本的任何系统调用,默认情况下将调用 A 版本。 .Net 在内部使用 unicode,如果我没记错的话,新版本的 windows 也会将所有内容都转换为 unicode,所以这意味着很多额外的编码开销。

我已经养成了总是在这里指定 unicode 的习惯,这是做事的正确方法还是会导致问题?

最佳答案

如果您使用 ANSI 变体,则如果(例如)存在名称无法在所使用的 ANSI 代码页中表示的文件,则会出现问题。使用 Unicode 的唯一缺点是您的代码可能无法在较旧的 Win9x 版本的 Windows(95、98 和 ME)上运行。

有一些函数必须使用 ANSI,因为它们实际上使用 ASCII(例如 GetProcAddress)。

关于.net - 我应该在 dllimport 中使用 Ansi 还是 Unicode 字符集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/211739/

相关文章:

.net - 可移植 WCF 测试客户端 10 (Visual Studio 2010)

c# - 计算 CPU 使用率

.net - XmlSerializer 反序列化时自动检测 XML 类型(.NET 2.0)?

c# - XNA 纹理与原生库

javascript对象,如何分配base64类型

java - 特殊信件翻译成英文

python - 具有非 ascii 字符的字节字符串文字

c - 在不使用第 3 方库的情况下基于 C 中的 char* 的多平台 Unicode 处理?

c# - 使用 RegisterHotKey 检测 Ctrl+V 但不拦截它

c# - .NET PInvoke 在 Linux 和 Mac OS X 平台上可用吗?