Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, WinAPI] Porównanie wartości _bstr_t oraz LPSTR. Konwersja.

Ostatnio zmodyfikowano 2012-12-08 20:06
Autor Wiadomość
berkov
Temat założony przez niniejszego użytkownika
[C++, WinAPI] Porównanie wartości _bstr_t oraz LPSTR. Konwersja.
» 2012-12-08 19:29:34
Hey ho.

proboje porownac dwie wartosci z _bstr_t  oraz LPSTR.
Doszukalem sie dokumentacji o _bstr_t oraz BSTR ale przyznaje ze srednio ja zrozumialem.
W kazdym badz razie ponizszy kod zawsze zwraca false "NIEROWNE".
Przy debuggowaniu jak podladam wartosci obu zmiennych to sa identyczne, czyli "text" (pointer oczywiscie inny).
Nie rozumiem tego. Pewnie znowu robie jakis glupi blad ktorego nie widze.

C/C++
_bstr_t a = "text";
LPSTR b =( LPSTR ) GlobalAlloc( GPTR, sizeof(( char * ) a ) );
strcpy( b, a );

LPSTR c = "text";
if( b == c ) MessageBox( 0, "ROWNE!", 0, 0 );
else MessageBox( 0, "NIEROWNE", 0, 0 );


p.s.
Swoja droga troche nie rozumiem co sie wpisuje w rozmiarze w GlobalAlloc.
Nawet jak tam wpisze GlobalAlloc( GPTR, 1) to i tak w b bede mial "text", "1" to nie za malo?
Po co ta zmienna? No chyba ze to i tak pointer i nie ma znaczenia jaka ma wielkosc....

dzieki
P-70575
Admixior
» 2012-12-08 19:33:19
Nie możesz porónać 2 wskaźników w ten sposób a==b o wtedy sprawdzisz czy pokazują na te same adresy.
Do porównania służy strcmp(a,b)==0 //takie samo
P-70576
berkov
Temat założony przez niniejszego użytkownika
» 2012-12-08 19:36:35
HMM..

no tez tak myslalem.. wiec wczesniej sprobowalem:
if (*b == *c)  MessageBox (0, "ROWNE!",0,0);
else MessageBox (0, "NIEROWNE",0,0);


ale to z drugiej storny zawsze zwraca TRUE!.. nawet jak wartosci sa zupelnie inne..
dlaczego?
P-70577
berkov
Temat założony przez niniejszego użytkownika
» 2012-12-08 19:45:09
@Admixior - dzieki, oczywiscie dziala!


ale dalej mam dwa pytania:
1. czemu nie moge uzyc *b==*c?
2. czemu nie ma znaczenia co  wpisze w rozmiarze w GlobalAlloc? nawet jak wpisze GlobalAlloc( GPTR, 1) to wszystko jest ok.
P-70579
kubawal
» 2012-12-08 19:51:08
1. czemu nie moge uzyc *b==*c?

Jeśli masz:
LPSTR s = "BLEBLE"
, to
* s == 'B'
.

Łapiesz już? s wskazuje na łańcuch, a *s ma jego pierwszą literę. Tak samo (*s) + 1 zawiera drugą, (*s) + 2 na trzecią itd.
P-70581
berkov
Temat założony przez niniejszego użytkownika
» 2012-12-08 20:06:44
No racja!.. dzieki.. troche mi wstyd! :-)

ktos wie co z pyt 2?
P-70583
« 1 »
  Strona 1 z 1