4

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

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

4

1 回答 1

6

如果您使用 ANSI 变体,如果(例如)有一个名称无法在所使用的 ANSI 代码页中表示的文件,您将遇到问题。使用 Unicode 的唯一缺点是您的代码在 Windows 的旧 Win9x 版本(95、98 和 ME)上可能无法正常工作。

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

于 2008-10-17T11:13:17.263 回答