如何将一个缓冲区指针的内容复制到另一个

时间:2012-10-09 15:17:58

标签: c++ c com atl

我有以下指针:

BSTR *PREVIOUS;

我想制作一份新副本:

BSTR *NEW;

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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);