ketchup
Goto Top

convertierung von BSTR nach String

möchte unter VC++ einen BSTR so konvertieren, dass ich ihn in eine Textdatei schreiben kann (mit fprintf())

ich möchte in meinen cpp eien convertierung von BSTR auf einen printbaren String durchführen.
aber egal wie ich es versuche, der compiler meldet immer wieder irgendwelche fehler, die ich nicht verstehe.

hab im google gesucht und hunderte beispiele gefunden, aber keine die ich verstanden hätte face-wink

kann mir jemand einen tipp geben?
oder das kurze codeschnippsel das ich benötige hier einfach posten?

please face-wink

thx
jürgen

Content-Key: 19561

Url: https://administrator.de/contentid/19561

Ausgedruckt am: 29.03.2024 um 13:03 Uhr

Mitglied: Biber
Biber 12.11.2005 um 13:41:53 Uhr
Goto Top
Moin ketchup,
jo, Dein Codeschnipsel könnte helfen...

Grundsätzlich ist hilfreich ein Blick auf die WideCharToMultiByte() in MSDN. Da gibt es brauchbare Beispiele zu dieser Konvertierung.
Wenn es einfach nur darum geht, die Wide/Unicode-BSTRs in Narrow/Ansi-String zu konvertieren, reicht auch
...
LPSTR theChar;
theChar = (LPSTR) theBSTR;
...

HTH Biber
[Edit]
pfffffff....so ne miese Bewertung.. dann poste ich lieber doch einen Codeschnipsel:
//------------------------//
// Convert BSTR to char * //
//------------------------//
inline char* ConvertBSTRToString(BSTR pSrc)
{
    if(!pSrc) return NULL;

    // Auch eingeschlossene NULLs konvertieren
    DWORD cb,cwch = ::SysStringLen(pSrc);

    char *szOut = NULL;

    if(cb = ::WideCharToMultiByte(CP_ACP, 0, 
               pSrc, cwch + 1, NULL, 0, 0, 0))
    {
        szOut = new char[cb];
        if(szOut)
        {
            szOut[cb - 1]  = '\0';  

            if(!::WideCharToMultiByte(CP_ACP, 0, 
                pSrc, cwch + 1, szOut, cb, 0, 0))
            {
                delete szOut; // bei Fehler löschen;
                szOut = NULL;
            }
        }
    }

    return szOut;
};
[/Edit]