2010-10-05 60 views
0

我正在使用IWebBrowser2在使用C++的Web瀏覽器上工作。宣佈在上面,任何範圍之內,我有這樣的:將BSTR複製到char [1024]中?

static char buf[1024]; 

在DocumentComplete事件,我設置的BSTR具有:

CComBSTR bstrHTMLText; 
X->get_outerHTML(&bstrHTMLText); 

我想要做的是bstrHTMLText值複製到BUF (如果bstrHTMLText長度> 1024,只需填寫buf並忽略其餘部分)。每次文件完全火災。

我該怎麼做?

回答

1

A BSTR是祕密指向Unicode字符串的指針,隱藏長度前綴位於字符串數據的前面。因此,您可以將其轉換爲wchar_t*,然後將該寬字符字符串轉換爲ANSI字符串,例如,使用WideCharToMultiByte

WideCharToMultiByte(CP_UTF8, 
        0, 
        bstrHTMLText.m_str, 
        SysStringLen(bstrHTMLText.m_str), 
        buf, 
        sizeof(buf), 
        NULL, 
        NULL); 
+1

小心這個。它通常會(也許總是)工作,但有兩個潛在的問題:NULL是一個有效的BSTR,並且BSTR不一定以NULL結尾(根據規範)。你的解決方案通常可能會在實踐中發揮作用(並且我已經看到很多代碼都是相同的),但這在技術上並不正確。 – Nick 2010-10-05 05:55:46

+0

達到此目的在技術上是正確的? – gtilx 2010-10-05 18:39:05