当您使用 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/