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

Nic*_*ace 1 c c++ com atl

我有以下指针:

BSTR *PREVIOUS;
Run Code Online (Sandbox Code Playgroud)

我想制作一份新副本:

BSTR *NEW;
Run Code Online (Sandbox Code Playgroud)

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

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

memcpy(NEW,PREVIOUS,SysStringByteLen(*PREVIOUS));
Run Code Online (Sandbox Code Playgroud)

编译时我没有看到任何错误,因为我正在ATL COM环境中工作.请帮忙.谢谢!

Ada*_*eld 5

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

BSTR NEW = SysAllocString(PREVIOUS);
Run Code Online (Sandbox Code Playgroud)

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

BSTR *PREVIOUS = ...;  // This must point to a valid BSTR
BSTR *NEW = ...;  // This must also point to a valid BSTR
*NEW = SysAllocString(*PREVIOUS);
Run Code Online (Sandbox Code Playgroud)