Arbeiten mit dem Datentyp BSTR



  • Guten Tag !

    Der BSTR Datentyp ist doch als unsigned short definiert. Im Grunde genommen ein wchar_t. Also Unicode String.

    Welche String Funktionen sollte man denn dann nehmen für den BSTR Datentyp. Die WideChar Funktionen wie wcscat, wcscpy, wcscmp, ... ?

    Oder besitzt der BSTR Datentyp eigene Funktionen so das man zum Beispiel beim vergleichen zweier BSTRs lieber eine andere Funktionen als "wcscmp" nehmen sollte.

    🙂

    MFG Michael



  • BSTR ist ein UNICODE-String der mit einer der SysAlloc* - Funktionen alloziert werden muß. Die 4 Byte vor dem eignetlichen UNICODE-string ist die Länge des Strings. Der String ist aber auf jeden Fall '\0'-terminiert.

    Die Spezifikation für BSTR erlaubt, daß der BSTR '\0'-zeichen enthält.
    Für BSTR sind nur API's für Alloc, Realloc und Free definiert.

    Das heißt also:

    Solange es sich um einen "normalen" String (ohne eingebettete '\0') handelt, und die Funktion die Länge nicht ändert, kannst du einen BSTR problemlos als an die wcs* - Funktionen übergeben.

    Ansonsten mußt du halt mit SysAllocStringLen ein entsprechend großes Puffer allozieren, und dann mit wcscpy / wcscat usw. den "Ziel-String" zusammenbauen.

    comutil.h (oder war's comdef.h?) enthält eine nette _bstr_t - Klasse, die BSTR's erträglich macht, und außerdem die ANSI<-->UNICODE - Konvertierungen vornimmt.

    Ich hoff' ja für dich, daß es nicht relevant ist, aber: Unter 16-Bit OLE und auf dem Apple Mac sind BSTR's ANSI strings...

    ph



  • Danke für die Antwort.

    peterchen schrieb:

    comutil.h (oder war's comdef.h?) enthält eine nette _bstr_t - Klasse ...

    Die comdef.h wars. Muß mir die Klasse mal genauer anschauen. Aber zum Vergleichen reicht ja, wie du schon gesagt hast, ersteinmal die wcs* Routine.

    Gruß Michael



  • grad heut stolper ich doch ünber einen "Alles über BSTR"-Blogeintrag...

    http://blogs.gotdotnet.com/ericli/PermaLink.aspx/853ae05f-7610-4531-ab1b-070695e61168



  • Oh 😮 !

    Das ist ja nett. Vielen Dank auch. 🙂 🙂

    MFG Michael


Anmelden zum Antworten