PCWSTR 与 LPWSTR

2023-11-24

据我了解(如果我错了,请纠正我)它们之间的唯一区别是字符串是否可以被调用的函数修改。 (PCWSTR , LPWSTR)

我现在尝试将一个字符串从 C# 传递到一个期望的函数PCWSTR,但我能找到的只是[MarshalAs(UnmanagedType.LPWStr)]。我说得对吗? (是的,它works。但这并不能证明它没问题。有些事work但随后会导致内存泄漏等)


PCWSTR 是一种不合时宜的恐龙和人类电影风格。查找在 Unicode 字符串上使用短指针的 16 位程序就像查找白象一样。只有区分 LPCWSTR 和 LPWSTR 才有意义。

LPCWSTR 中的 C 只是注释const,C 语言关键字。它承诺被调用的函数永远不会修改您传递的字符串。在该语言中了解这一点非常重要,将字符串文字传递给 LPWSTR 参数是不安全的。当程序尝试更新字符串并失败时,很可能会导致程序崩溃,因为内存页是只读的。

当你调用时这很重要。将 System.String 传递给 LPCWSTR 参数是可以的,字符串在 .NET 中是不可变的,因此您可以保证内部字符串文字不会被破坏。一个非常难以诊断的问题。使用[MarshalAs(UnmanagedType.LPWStr)]一般来说,显式不需要,您可以使用 [DllImport] 属性中的 CharSet.Auto 属性并免费获得 LPWStr 封送处理。

但如果参数类型是 LPWSTR 那么你must而是传递一个 StringBuilder 。有足够的容量允许本机代码在构建器缓冲区中查找以写入字符串。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PCWSTR 与 LPWSTR 的相关文章

随机推荐

  • MVC5 Razor html.dropdownlistfor 当值在数组中时设置选择

    我正在使用 C 和 NET Framework 4 6 1 开发 ASP NET MVC 5 应用程序 我有这个View model MyProject Web API Models AggregationLevelConfViewMode
  • 如何递归解压嵌套的 ZIP 文件?

    假设嵌套 ZIP 文件深处有一个秘密文件 即 zip 文件内的 zip 文件内的 zip 文件 等等 zip 文件的名称为1 zip 2 zip 3 zip etc 我们不知道 zip 文件嵌套的深度 但可能有数千个 循环遍历所有文件直到最
  • 在 Sails.js 中处理数据库环境配置

    我遇到的问题与以下引用有关官方文档 注意 如果模型使用了与适配器的任何连接 则与该适配器的所有连接都将加载到 sails lift 上 无论模型是否实际使用它们 在上面的示例中 如果模型配置为使用 localMysql 连接 则 local
  • 将远程 github 存储库的更改合并到本地存储库

    我前段时间在 github 上分叉了一个存储库 做了一个小更改并将更改推回我的 github 分叉 此后原始存储库已更改 我想将原始存储库中的更改合并到我的分支中 我对 git 和 github 都很陌生 我需要具体的命令来操作 git r
  • 为什么 apt-get 功能在 Mac OS X v10.9 (Mavericks) 的终端中不起作用?

    我当时正在看this 正如您所看到的 我被告知要输入的第一个命令是 sudo apt get install python setuptools 当我这样做时 它输出 sudo apt get command not found 我不知道为
  • -I GCC 中的标志(Linux)

    我找到了一个带有 Makefile 的源文件包 我浏览了它 在 CFLAG 变量中 有一个 FLAG I 我在网上搜索过 但找不到它实际的作用 它与 C 文件中包含的库文件有关吗 stdio h unistd h pthread h 请指出
  • Javascript 获取对象属性名称

    我传递了以下对象 var myVar typeA option1 one option2 two 我希望能够拔出钥匙typeA从上面的结构来看 这个值每次都会改变 所以下次它可能会改变typeB 所以我想知道是否有办法让我做类似以下伪代码的
  • LibGDX 中的 AssetManager

    我正在尝试使用AssetManagerLibGDX 中的类 我了解它是如何工作的 但我正在尝试实现一个加载屏幕 我已遵循AssetManagerTest java file here 但我很难弄清楚如何让它正常工作 有人能指出我正确的方向吗
  • 是否可以更改 ToolStripMenuItem 工具提示字体?

    我有一个动态填充的 ContextMenuStrip 其中每个 ToolStripMenuItem 都有一个工具提示的格式化文本 而且 为了使该文本对用户有意义 我必须使用等宽字体 例如 Courier New 默认字体是常规的非等宽字体
  • 当字段为空时,远程属性不会触发

    我在用着RemoteAttribute对于我表单上的特定字段 其目的并不重要 重要的是 每当字段发生更改时 它都需要触发验证操作 这对我来说工作得很好 除非该字段更改为空白 我用谷歌搜索过这个但没有找到结果 有谁知道如果RemoteAttr
  • 带有 lapply 的内部 S3 泛型

    我有一个 S3 通用函数 我希望将其作为包的内部部分 如果可能的话我宁愿不导出它 一个有趣的缺点是 似乎lapply无法找到或使用正确的 S3 方法 有谁知道这种行为背后的原因 下面是一个可重现的示例 其中涉及从我的 github 安装虚拟
  • 在导航控制器中单击后退按钮时会调用哪个方法?

    我想在导航控制器中单击后退按钮时保存数据库 所以我会在方法中插入代码 在导航控制器中单击后退按钮时会调用什么方法 要执行您要求的操作 请查看UINavigationControllerDelegate协议 即方法 void navigati
  • Scala 的 Actor 是否有非阻塞 IO 开源实现?

    我需要处理相当大的文件 500Meg zip 文件 Scala 的 actor 是否有非阻塞 IO 开源实现 如果我的问题是正确的 那么您需要文件的非阻塞 IO 那么我有坏消息要告诉你 NIO Java6 中的 Java NIO 在处理文件
  • 如何确定两组纬度/经度坐标之间的距离?

    我正在尝试写一些东西来确定纬度 经度坐标组之间的距离 我正在使用我在上面找到的以下代码这个网站 public static double distance double lat1 double lon1 double lat2 double
  • 使用 python 中的 Optimize.leastsq 方法获取拟合参数的标准误差

    我有一组数据 位移与时间 我使用 optimization leastsq 方法将其拟合到几个方程中 我现在正在寻找拟合参数的误差值 查看文档 输出的矩阵是雅可比矩阵 我必须将其乘以残差矩阵才能得到我的值 不幸的是 我不是统计学家 所以我有
  • 为什么 Blueimp 的 JQuery 文件上传会添加所有上一个文件。即使在 init 上设置了选项 [replaceFileInput: false] 和 [maxNumberOfFiles: 1],是否仍选择文件?

    我只有普通形式 带有一些输入字段和一个文件输入字段 我使用 Blueimp 的 Jquery 文件上传插件来上传文件 如果您选择一个文件然后单击上传按钮 它似乎可以工作 但是 如果您重新选择要上传的文件 它会保存所有选择的历史记录 并在上传
  • 为什么在循环中使用 sleep 时,Python 中的 print 不会暂停?

    这段代码 import time for i in range 10 print i time sleep 5 导致我的计算机挂起 5 秒 然后打印出 0 9 而不是每半秒打印一个数字 难道我做错了什么 print 默认情况下 打印到sys
  • Django获取视图中的静态文件URL

    我正在使用 reportlab pdfgen 创建 PDF 在 PDF 中有一张由以下人员创建的图像drawImage 为此 我需要图像的 URL 或视图中图像的路径 我成功构建了 URL 但如何获取图像的本地路径 我如何获取网址 pref
  • libc++ 的 wchar_t 输出

    include
  • PCWSTR 与 LPWSTR

    据我了解 如果我错了 请纠正我 它们之间的唯一区别是字符串是否可以被调用的函数修改 PCWSTR LPWSTR 我现在尝试将一个字符串从 C 传递到一个期望的函数PCWSTR 但我能找到的只是 MarshalAs UnmanagedType