PCWSTRvsLPWSTR这是我的理解(如有错误请纠正我),它们之间的唯一区别是调用函数是否可以修改字符串。(PCWSTR,LPWSTR)我目前正在尝试将一个字符串从C#传递给一个需要PCWSTR的函数,但我能找到的只有[MarshalAs(UnmanagedType.LPWStr)]。我纠正一下好吗?(是的,它有效。然而,这并不能证明它没问题。有些东西有效,但会导致内存泄漏等。)PCWSTR是一种时代错误的、恐龙和人类的电影风格。查找在Unicode字符串上使用短指针的16位程序就像查找白象一样。只有LPCWSTR和LPWSTR之间的区别很重要。LPCWSTR中的C只是const注释,是C语言的关键字。它承诺被调用的函数永远不会修改您传递给它的字符串。知道使用该语言将字符串文字传递给LPWSTR参数是不安全的,这一点非常重要。当程序尝试更新字符串时,很可能会使程序崩溃,因为内存页是只读的。当您发消息时,这很重要。将System.String传递给LPCWSTR参数没问题,字符串在.NET中是不可变的,因此可以保证损坏的字符串文字不会被破坏。一个很难诊断的问题。您通常不需要显式使用[MarshalAs(UnmanagedType.LPWStr)],您可以使用[DllImport]属性中的CharSet.Auto属性并免费获得LPWStr编组。但是如果参数类型是LPWSTR,那么你必须传递一个StringBuilder。有足够的容量允许本机代码在构建器缓冲区中寻找要写入的字符串。与采用LPWSTR参数的函数不同,采用LPWSTR参数的函数不能使用此参数来修改字符串的字符。字符串的每个字符都存储为WCHAR。UnmanagedType.LPWStr是此类字符串的正确编组类型。以上就是C#学习教程:PCWSTR和LPWSTR分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
