Han*_*ant 13
PCWSTR是一个时间不合时代,恐龙和人类的电影风格.查找在Unicode字符串上使用短指针的16位程序就像找到一头白象.只有LPCWSTR和LPWSTR之间的区别才有意义.
LPCWSTR中的C只是const(C语言关键字)的注释.它承诺被调用函数永远不会修改您传递的字符串.使用该语言知道这一点非常重要,将字符串文字传递给LPWSTR参数是不安全的.当程序尝试更新字符串时很可能会使程序崩溃,因为内存页面是只读的而失败.
当你发消息时,这很重要.将System.String传递给LPCWSTR参数很好,字符串在.NET中是不可变的,因此您可以保证中断的字符串文字不会被破坏.一个非常难以诊断的问题.[MarshalAs(UnmanagedType.LPWStr)]通常不需要显式使用,您可以使用[DllImport]属性中的CharSet.Auto属性并免费获取LPWStr封送处理.
但是如果参数类型是LPWSTR,那么您必须传递StringBuilder.具有足够的容量,允许本机代码在构建器缓冲区中查找以写入字符串.