Zpětně kompatibilní je dokumentované chování systému. Pokud vývojář spoléhá na nedokumentované vlastnosti systému, samozřejmě mu aplikace nemusí v příští verzi fungovat. A například k problému rozlišení: pokud autor aplikace načte řekněme jen 8 položek možných kombinací rozlišení a refresh rate, protože mu to na Windows 98 stačilo, a ve Windows 8 má těch kombinací víc než 50, takže se jeho kód nedostane ani k položce 800x600px, čí je to asi tak chyba? Samozřejmě MS, protože ještě ve Windows 2000 to přece fungovalo ;)
Chcete příklad, jak použití nedokumentovaných funkcí působí problémy?
- Home adresář uživatele NENÍ v C:\Windows\Profiles\jméno, ani v C:\Documents and Settings\jméno. To umístění se mění podle verze Windows i lokalizace. Použijte environment variables, nebo API SHGetSpecialFolderLocation.
- Desktop NENÍ v adresáři pod profilem uživatele v podadresáři Desktop, a Start Menu NENÍ v podadresáři Start Menu. Liší se to podle verze Windows a lokalizace. Použijte API SHGetSpecialFolderLocation.
- Větev Shell Folders v Registry NEOBSAHUJE lokace shell folders. Tato větev Registry byla odstraněna z dokumentace před uvedením Windows 95, existuje jen pro kompatibilitu s aplikacemi psanými pro betu Win95, a plní se hodnotami jen za určitých okolností. Použijte env values nebo API SHGetSpecialFolderLocation.
- Pořadí Window Messages je buď popsané v dokumentaci, nebo na něj nelze spoléhat. Pokud si ho vyzkoušíte a spoléháte na to, že bude vždy stejné, řítíte se do problému.
- Nedokumentované Window Messages nepoužívejte, a to se ze stejného důvodu - zítra tam nemusí být, nebo mohou mít úplně jiný význam.
- Pokud návratová hodnota Win32 funkce není ERROR_SUCCESS (tj. nula), volání selhalo. Pokud dokumentace netvrdí něco jiného, návratová hodnota pak nehraje roli, protože se liší podle verze Windows, driverů a kdo ví čeho ještě. Takže se z ní nesnažte vykoukat příčinu problému, a zavolejte API GetLastError(), které nám řekne více.
- Nekraďte resources (ikony, animace apod.) z knihoven shellu. Ty resources tam v příští verzi Windows nejspíš nebudou, případně budou mít jiný formát. A protože krádež resources provádějí jen prasata, asi neošetří ani situaci kdy tam daný resource není, a aplikace pak spadne. Ikony i animace jsou součástí SDK, takže je odtamtud zkopírujte do své aplikace.
Raymond Chen občas zveřejňuje nějaké perličky na blogu. Nabídněte si.
http://blogs.msdn.com/b/oldnewthing/archive/2003/11/03/55532.aspx
http://blogs.msdn.com/b/oldnewthing/archive/2004/03/26/96777.aspx
http://blogs.msdn.com/b/oldnewthing/archive/2004/10/26/247918.aspx
http://blogs.msdn.com/b/oldnewthing/archive/2005/01/18/355177.aspx
http://blogs.msdn.com/b/oldnewthing/archive/2010/03/11/9976571.aspx
http://blogs.msdn.com/oldnewthing/archive/2003/10/15/55296.aspx
http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx
http://blogs.msdn.com/oldnewthing/archive/2004/03/26/96777.aspx
http://blogs.msdn.com/oldnewthing/archive/2005/01/18/355177.aspx
http://blogs.msdn.com/oldnewthing/archive/2005/09/01/459023.aspx
http://blogs.msdn.com/oldnewthing/archive/2005/10/26/485133.aspx
http://msdn.technetweb3.orcsweb.com/oldnewthing/archive/2008/01/11/7065021.aspx
http://technet.microsoft.com/en-us/magazine/2006.11.windowsconfidential.aspx
http://www.microsoft.com/technet/technetmag/issues/2006/10/WindowsConfidential/