나는 넓은 문자를 멀티 바이트로 변환하려고합니다. yje myfile 부분에만 있습니다. 나머지는 잘 작동합니다. 왜냐하면 저는 여러 곳에서 ofstream을 사용하기 때문에 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");
}
} 당신이 잘못 WideCharToMultiByte
을 사용하고
'LogURL'에 어떤 내용이 나타날 것으로 예상됩니까? 'WideCharToMultiByte'의 리턴 값은 버퍼의 필수 크기입니다. 내 생각에 다른 문서를 읽어야한다. –
'wsURL '이란 무엇입니까? 어쩌면 [이 답변] (http://stackoverflow.com/questions/6587963/c-convert-from-lpctstr-to-const-char/6588525#6588525)이 유용 할 수 있습니다. –
LogURL이 "stackoverflow.com"이라는 URL을 suj로 기대하고 있습니다. 전체 코드는 위의 내용을 참조하십시오. –