2011-11-08 71 views
0

我試圖將寬字符轉換爲多字節。這只是在我的文件部分。其餘的工作正常。我不能使用wofstream,因爲我在幾個地方使用了流,所以我留下了這個。寬字符爲多字節

void PrintBrowserInfo(IWebBrowser2 *pBrowser) { 
BSTR bstr; 
pBrowser->get_LocationURL(&bstr); 
std::wstring wsURL; 
wsURL = bstr; 

size_t DSlashLoc = wsURL.find(L"://"); 
if (DSlashLoc != wsURL.npos) 
    { 
    wsURL.erase(wsURL.begin(), wsURL.begin() + DSlashLoc + 3); 
    } 
    DSlashLoc = wsURL.find(L"www."); 
    if (DSlashLoc == 0) 
{ 
wsURL.erase(wsURL.begin(), wsURL.begin() + 4); 
} 
DSlashLoc = wsURL.find(L"/"); 
if (DSlashLoc != wsURL.npos) 
{ 
wsURL.erase(DSlashLoc); 
} 
wprintf(L"\n URL: %s\n\n", wsURL.c_str()); 
char LogURL = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, wsURL.c_str(), -1, NULL, 0, NULL, NULL); 
    myfile << "\n URL:" << LogURL; 
    SysFreeString(bstr); 
} 

void EnumExplorers() { 
CoInitialize(NULL); 
SHDocVw::IShellWindowsPtr spSHWinds; 
IDispatchPtr spDisp; 
if (spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) == S_OK) { 
    long nCount = spSHWinds->GetCount(); 
    for (long i = 0; i < nCount; i++) { 
     _variant_t va(i, VT_I4); 
     spDisp = spSHWinds->Item(va); 
     SHDocVw::IWebBrowser2Ptr spBrowser(spDisp); 
     if (spBrowser != NULL) { 
      PrintBrowserInfo((IWebBrowser2 *)spBrowser.GetInterfacePtr()); 
      spBrowser.Release(); 
     } 
    } 
} else { 
    puts("Shell windows failed to initialise"); 
} 

}

+0

你期待在'LogURL'中出現什麼? 'WideCharToMultiByte'的返回值是緩衝區所需的大小。您需要再次閱讀我認爲的文檔。 –

+0

什麼是'wsURL'?也許[這個答案](http://stackoverflow.com/questions/6587963/c-convert-from-lpctstr-to-const-char/6588525#6588525)可能會有用。 –

+0

我期待LogURL成爲一個URL爲「stackoverflow.com」的sucj。請參閱上面的完整代碼。 –

回答

3

您使用WideCharToMultiByte錯誤。你需要傳遞一個字符串緩衝區來接收轉換後的字符串。如您所做的那樣使用NULL0作爲參數將返回所需的結果字符串大小。

int length = WideCharToMultiByte (CP_ACP, WC_COMPOSITECHECK, wsURL.c_str(), -1, NULL, 0, NULL, NULL); 
std::string LogURL(length+1, 0); 
int result = WideCharToMultiByte (CP_ACP, WC_COMPOSITECHECK, wsURL.c_str(), -1, &LogURL[0], length+1, NULL, NULL); 

您應該檢查result爲非零值,以確保功能正常工作。

+0

謝謝!現在它正在返回正確的答案。非常好的答案! –

相關問題