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");
}
}
你期待在'LogURL'中出現什麼? 'WideCharToMultiByte'的返回值是緩衝區所需的大小。您需要再次閱讀我認爲的文檔。 –
什麼是'wsURL'?也許[這個答案](http://stackoverflow.com/questions/6587963/c-convert-from-lpctstr-to-const-char/6588525#6588525)可能會有用。 –
我期待LogURL成爲一個URL爲「stackoverflow.com」的sucj。請參閱上面的完整代碼。 –