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