[WinAPI, C++] Problem z przekazywaniem pointera
Ostatnio zmodyfikowano 2012-12-17 18:53
codex Temat założony przez niniejszego użytkownika |
» 2012-12-17 17:24:59 proc ShowErrorMessage hWnd,dwError local lpBuffer:DWORD lea eax,[lpBuffer] invoke FormatMessage,FORMAT_MESSAGE_ALLOCATE_BUFFER+FORMAT_MESSAGE_FROM_SYSTEM,0,[dwError],LANG_NEUTRAL,eax,0,0 invoke MessageBox,[hWnd],[lpBuffer],NULL,MB_ICONERROR+MB_OK invoke LocalFree,[lpBuffer] ret endp
Oczywiscie, że to nie to samo, ale jeżeli w pamięci w określonym miejscu wyląduje wartość typu LPSTR o wartości = x to bez różnicy czy by wylądowało tam LPVOID o wartosci = x lub DWORD o wartosci = x. Program wykona się identycznie. Jestem tego pewien zresztą widać wyżej z przykładu w asm (gotowca wziołem). |
|
kubawal |
» 2012-12-17 18:09:20 Jakbyś chciał, to mógłbyś w sumie zadeklarować se tablicę char'ów i do niej po jednym bajcie przypisywać ręcznie kolejne bajty wskaźnika. Ale to już chyba lekki offtop :) |
|
codex Temat założony przez niniejszego użytkownika |
» 2012-12-17 18:25:38 No właśnie żartując trafiłeś w sedno sprawy nieświadomie ponieważ do tablicy bajtów czy jak tam wolisz nazywać charów można bezpośrednio skopiować 4 bajty pointera - nie trzeba wcale po 1 kopiować. Z tego powodu nie kumam ni w ząb dlaczego w cpp to takie ważne przestrzegane i pilnowane. Coś mi się wydaje, że tak szybko się nie dowiem :) |
|
DejaVu |
» 2012-12-17 18:48:20 1. Intellisense. 2. Łatwiej czytać kod. 3. Trudniej popełnić nieświadomie błąd. 4. Wskaźnik wcale nie musi mieć 4 bajtów. 5. Typ void* nie mówi o tym na jakie dane wskazuje. 6. Masz zapewnioną kontrolę typów chociażby posługując się wskaźnikami na klasę bazową przy dziedziczeniach. 7. Dziwna ta dyskusja... |
|
kubawal |
» 2012-12-17 18:53:32 @offtop: Widzę, że Pan Piotr zmienił sobie avatara :) Nawet bardziej pasuje, niż ten poprzedni :P |
|
1 « 2 » |