CInternetSession und UNICODE



  • Hallo zusammen,

    die Funktion ReadString () liefert ja im Zusammenhang mit CInternetSession unter bestimmten Umständen in einem WideChar String (CString) einen MultiByte String.

    Man muss diesen String in einer Unicode Anwendung mit MultiByteToWideChar() umwandeln. Aber MultiByteToWideChar() nimmt als Input keinen CString an.

    Ich habe sehr viele Beiträge im Internet gefunden aber keine Lösung welche Funktioniert.

    Der untenstehende Hack funktioniert ist aber nicht wirklich schön.

    Gibt es wirklich keine Elegantere Lösung?

    bool WebReader::ReadSite ()
    {
    	try
    	{
    		mSiteData = mSession.OpenURL (mURL, 1, INTERNET_FLAG_TRANSFER_ASCII);
    	}
    	catch (CInternetException* e)
    	{
    		mSiteData = NULL;
    		e->Delete ();
    		return false;
    	}
    
    	if (mSiteData)
    	{
    		CString str;
    		Tstring line;
    		for (Int i = 0; i < 20000 && mSiteData->ReadString (str); ++i)
    		{
    			if (!str.IsEmpty ())
    			{
    				//********** Hack Begin *****************
    				LPCSTR buf = reinterpret_cast<LPCSTR> (str.GetBuffer ());
    				size_t mbLen = strlen (buf);
    				string mbStr;
    				mbStr.assign (buf, mbLen);
    				str.ReleaseBuffer ();
    				//********** Hack End *******************
    
    				Int len = MultiByteToWideChar (CP_ACP, 0, mbStr.c_str(), mbLen, NULL, 0);
    
    				WCHAR* wbBuf = new WCHAR [len];
    				MultiByteToWideChar (CP_ACP, 0, mbStr.c_str(), mbLen, wbBuf, len);
    
    				line.assign (wbBuf, len);
    				delete wbBuf;
    
    				if (line.find (_T("fix_mortgage")) != Tstring::npos)
    				{
    					line = Trim (line);
    					if (line[line.size () - 1] != _T('>'))
    						line += _T(">");
    					mWebSite += line.c_str ();
    					mWebSite += "\r\n";
    				}
    			}
    		}
    		mSiteData->Close ();
    		delete mSiteData;
    	}
    	return true;
    }
    


  • mbstowcs_s



  • Hallo,

    ich will nicht MultiByteToWideChar ersetzen ich möchte den Hack ersetzen.

    mbstowcs_s will den MultiByte String auch als const char*!

    Gruss
    Walter



  • Ich erkenne den Grund fuer dein Problem nicht.
    str.GetBuffer() liefert doch bereits dein const char*



  • Hallo,

    Nein, bei UNICODE liefert str.GetBuffer() einen TCHAR* (wchar_t*).

    Und const ist er schon gar nicht wie Du in der Doku von str.GetBuffer() nachlesen kannst.

    Gruss
    Walter


Log in to reply