使用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).