【问题标题】:How to copy contents of one buffer pointer to another如何将一个缓冲区指针的内容复制到另一个
【发布时间】:2012-09-29 23:23:28
【问题描述】:

我有以下指针:

BSTR *PREVIOUS;

我想制作一个新副本到:

BSTR *NEW;

我想将 CONTENTS/DATA(PREVIOUS 指向的)从 PREVIOUS 复制到 NEW。

我刚刚尝试了以下命令,但它不起作用:

memcpy(NEW,PREVIOUS,SysStringByteLen(*PREVIOUS));

我在编译时没有看到任何错误,因为我正在使用 ATL COM 环境。请帮忙。谢谢!

【问题讨论】:

  • 你能发布一些代码来演示这个问题吗?
  • 我只想复制一个缓冲区指针指向的内容。
  • 我猜是 memcpy ,我可能正在复制数据内容的地址,但不确定
  • 我还没有为New分配内存,我会尝试这样做。谢谢
  • 正如亚当在他的回答中指出的那样,BSTR 已经是一个指针。有关 BSTR 的更多信息以及为什么永远不要使用 malloc、new、free、delete 的原因,请参阅:blogs.msdn.com/b/ericlippert/archive/2003/09/12/52976.aspx 基本上它在内存中的布局与预期不同。

标签: c++ c com atl


【解决方案1】:

BSTR 本身已经是一个指针,你应该几乎总是只使用一个普通的BSTR,而不是一个BSTR*(它是一个指向BSTR 的指针)。通常,你会复制一个BSTRSysAllocString

BSTR NEW = SysAllocString(PREVIOUS);

如果你确实有一个指向 BSTR 的指针(例如通过函数的 out 参数),那么你添加一个间接层:

BSTR *PREVIOUS = ...;  // This must point to a valid BSTR
BSTR *NEW = ...;  // This must also point to a valid BSTR
*NEW = SysAllocString(*PREVIOUS);

【讨论】:

  • 如果您立即分配给它,我认为 NEW 不必最初指向有效的 BSTR 吗?但是您必须获取从 SysAllocString 返回的 BSTR 的地址,对吗?
  • only *Previous 指向一个 BSTR 而 *NEW 是我要复制 Previous 指向的内容的那个
  • @NicholeGrace。我现在明白了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 2018-04-16
相关资源
最近更新 更多