2012-10-09 124 views
1

我有以下指針:如何一個緩衝區指針的內容複製到另一個

BSTR *PREVIOUS; 

而且我希望做一個新副本:

BSTR *NEW; 

我要複製的目錄/ DATA (以前指的是)從PREVIOUS到NEW。

我只是嘗試了下面的命令,但它不工作:

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

我沒有看到任何錯誤編譯,因爲我對ATL COM環境中工作。請幫忙。謝謝!

+0

你能張貼一些代碼來證明這個問題嗎? – simonc

+0

我只想製作一個緩衝區指針指向的內容的另一個副本。 –

+0

我猜測與memcpy,我可能會複製數據內容的地址,但不知道它 –

回答

5

BSTR本身已經是一個指針,你應該總是使用只是一個普通的BSTR,不是BSTR*(這是一個指向BSTR)。通常情況下,你會複製BSTRSysAllocString

BSTR NEW = SysAllocString(PREVIOUS); 

如果你真的有一個指向BSTR(如通過函數的輸出參數),然後添加一個間接層:

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

如果你立即分配給它,我不認爲NEW最初必須指向一個有效的BSTR嗎?但是你必須從BSAllocString返回BSTR的地址,對嗎? – grieve

+0

*以前是指向BSTR和* NEW是我想要複製的內容之一指向 –

+0

@NicholeGrace。我現在明白了。謝謝。 – grieve

相關問題