-
1. Data: 2009-01-05 14:01:52
Temat: Re: przemyślenia na temat pamięci i rozmiaru plików
Od: Jakub Debski <d...@w...pl>
Remek explained on 2008-12-31 :
> Co konkretnie możesz wskazać błędnego, lub niepotrzebnego w konkretnej
> funkcji?
- Brak ujednoliconego sposobu zwracania błędów (HANDLE, LastError,
przez wartość, przez parametr, TRUE/FALSE, HRESULT).
- Przekazywanie do funkcji olbrzymiej listy parametrów nie przez
wskaźnik na strukturę (mój ulubieniec to CreateProcessWithLogon).
- Używanie jednocześnie typów prostych języka C (unsigned int), typów
specyficznych dla "Windows Data Types" (UINT) oraz "własnych" typów
(u_short). Te ostatnie szczególnie kochane w Winsock2, typy C w GDI,
zaś typy Windows w pozostałym API. Czasem używanie różnych konwencji w
jednej funkcji np. SetWindowsHookEx.
- Używanie w typach przedrostków LP dla wskaźników, czasami P, a
czasami '*'. Często różne konwencje są w jednej funkcji (np.
CryptAcquireContext). Języki z silniejszą typizacją niż C wymagają
rzutowania między takimi typami.
- Zaśmiecanie przestrzeni nazw tysiącami definicji typów bez żadnych
przedrostków. Dołączenie nowego pliku nagłówkowego może wymagać masy
zmian w Twoim kodzie lub różnych sztuczek związanych z jego
reorganizacją.
- Pozostałości z 16 bitowego Windows np. LPARAM i WPARAM.
- HANDLE czasami traktowany jako 32 bitowy int, gdy według definicji
powinien być PVOID.
- W GDI API niektóre wartości jako WORD, gdy współcześnie potrzebne są
DWORDy.
- Brak jednej konwencji nazw funkcji. Część zamiast windowsowych
wielbłądów typu CreateFileA występuje jako _xxxx np. _lopen, część to
same małe litery np. lstrlen, część ma przedrostki np.
WSAAsyncGetHostByAddr, część to mix różnych konwencji np.
ImageList_Add).
> Po sprawdzeniu okazało się, że obie procedury są identyczne. W związku z
> tym zamiast pisać bzdury, proponuję podpierać się konkretami.
Wystarczą powyższe, czy dalej będziesz pisał bzdury?
Jakub
-
2. Data: 2009-01-06 00:52:58
Temat: Re: przemyślenia na temat pamięci i rozmiaru plików
Od: Maciej Piechotka <u...@g...com>
Jakub Debski <d...@w...pl> writes:
> Remek explained on 2008-12-31 :
>> Co konkretnie możesz wskazać błędnego, lub niepotrzebnego w konkretnej
>> funkcji?
>
> - Brak ujednoliconego sposobu zwracania błędów (HANDLE, LastError,
> przez wartość, przez parametr, TRUE/FALSE, HRESULT).
Dorzuć errno i WSAGetLastError ;) W dodarku zawierają niby
podobne wartości tylko że o innych wartościach i z przedrostkiem WSA.
W dokumentacji radzą przy portowaniu programów pisać:
#define errno WSAGetLastError ()
ostrzegając że może to powodować problemy jeśli ktoś miesza z innymi
funkcjami POSIX. Dlaczego od razu nie errno?
Pozdrawiam
--
I've probably left my head... somewhere. Please wait untill I find it.
Homepage (pl_PL): http://uzytkownik.jogger.pl/
(GNU/)Linux User: #425935 (see http://counter.li.org/)