Avatar billede susrn Nybegynder
18. marts 2003 - 15:30 Der er 7 kommentarer og
2 løsninger

BSTR

Hvad er BSTR for en type, hvad er der galt med char*?
Det ville være godt med et link til en grundlæggende forklaring af BSTR, LPSTR osv.
Avatar billede jpk Nybegynder
18. marts 2003 - 15:40 #1
Under Win32 er det en wide character string pointer (Unicode)
Dvs. at der anvendes 2 bytes til hver karakter. en char er kun på 1 byte...

Du kan med fordel bruge TCHAR, da den er defineret som WCHAR når du kompilerer som Unicode og som char når du kompilerer til ANSI og DBCS.
Avatar billede susrn Nybegynder
18. marts 2003 - 16:04 #2
Hvad er forskellen mellem at kompilerer til Unicode, ANSI eller DBCS ?
Avatar billede jpk Nybegynder
18. marts 2003 - 16:08 #3
Netop at Unicode bruger 2 bytes til hver karakter. Det gør at der kan benyttes tegnsæt med mange flere tegn (16bit=65536) end de 256 der kan adresseres med 1 byte.
Avatar billede jpk Nybegynder
18. marts 2003 - 16:09 #4
Vil du fx lave en kinesisk version af dit program, får du svært ved at presse samtlige tegn ned i 8 bit, (meget)...
Avatar billede susrn Nybegynder
18. marts 2003 - 16:16 #5
åh ja, hvad så med LPSTR?
Avatar billede jpk Nybegynder
18. marts 2003 - 16:23 #6
Du kan se udfra navnet hvad de forskellige typer er:
LPSTR = long pointer to string
LPCSTR = long pointer to const string
osv...
Avatar billede jpk Nybegynder
18. marts 2003 - 16:30 #7
Hvis dit program skal køre både på Win98 og W2K kan du ikke kompilere det som Unicode, det understøtter Win98 ikke!
W2K og NT bruger Unicode internt, dvs. at alle strenge bliver konverteret hvis du kører et ANSI program under disse operativsystemer!
Skal dit program derimod kun køre på NT/2000, kan du med fordel kompilere det som Unicode, da du undgår konverteringen og altså får en lille hastighedsforbedring...
Avatar billede hsloth Novice
18. marts 2003 - 18:47 #8
En BSTR adskiller sig fra f.eks. en char* ved at længden af strengen findes i lageret umiddelbart før selve strengen. Hvis man således har :

BSTR valX = SysAllocStringLen(T"Hello Bstr", 10);
//
unsigned long* lenX = (unsigned long*)valX;
lenX--; // Lad lenX pege lige før valX

*lenX; // længden af valX

BSTR typen og COM er nært forbundne.

Når der skal sendes tegn data eller binære data mellem COM bør man bruge BSTR. Det skyldes at en BSTR normalt allokeres ved hjælp af kald til en funktion fra SysAllocString() familien. Variable allokeret ved hjælp af disse funktioner er super sillige at overføre mellem COM komponenter da de er allokeret af Windows' COM framework.

Dokumentation af BSTR's kan du finde her :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/automat/htm/chap7_2xgz.asp
Avatar billede susrn Nybegynder
18. marts 2003 - 20:45 #9
tak begge to, specielt tak for linket!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester