使用DllImport导入函数时,可以指定要使用的CharSet。我注意到在C#,C ++和visual basic中,.Net运行时默认使用Ansi而不是Unicode。因此,对于具有A和W版本的任何系统调用,默认情况下将调用A版本。 .Net在内部使用unicode,如果我没有弄错,新版本的windows也会将所有内容转换为unicode,这意味着需要额外的编组开销。
我已经养成了总是在这里指定unicode的习惯这是正确的做事方式还是会导致问题?
答案 0 :(得分:6)
如果使用ANSI变体,如果(例如)存在名称无法在正在使用的ANSI代码页中表示的文件,则会出现问题。使用Unicode的唯一缺点是你的代码在旧的Win9x版本的Windows(95,98和ME)上可能无法正常工作。
有一些函数需要使用ANSI,因为它们实际上使用ASCII(例如GetProcAddress)。