DWORD in BSTR konvertieren



  • Hi,

    wie kann ich am besten ein DWORD in einen BSTR umwandeln?

    Wenn ich es so versuche:

    DWORD n = 23;
    CString cstr;
    cstr.Format(L"%d", n);
    BSTR bstr = cstr.AllocSysString();
    

    bekomme ich folgenden Linker-Error:

    uafxwced.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in coredll.lib(COREDLL.dll)
    

    Komme ich auch ohne CString aus?

    Gruß, Thomas.



  • Das scheint zu funktionieren:

    DWORD n = 23; 
    wchar_t str[10];
    _itow(n, str, 10);	
    BSTR bstr = str;
    

  • Mod

    Du kannst keinen wchar_t pointer einfach in einen BSTR laden. BSTR sind durch spezielle Funktion (SysAllocString) allokierte Speicherbereiche. Wenn Du slch einen BSTR, den Du durch einen cast erzeugt hast irgendwohin schiebst wo ein richtiger BSTR erwartet wird, dann kracht es fürchterlich im Gebälk.

    DWORD n = 23; 
    wchar_t str[10];
    _itow(n, str, 10);    
    BSTR bstr = ::SysAllocString(str);
    

    Und bitte SysFreeString nicht vergessen. Oder gliech CComBSTR oder _bstr_t verwenden.



  • Danke für die Ergänzung.
    Schade, dass sich der Compiler nicht selber meldet.

    Als ich eine Methode mit BSTR als Rückgabewert erstellen wollte, hab ichs dann in Form einer Exception gemerkt.

    Thomas


Anmelden zum Antworten