Na chłopski rozum to widzę to tak. Czytam opis, podglądam przykład (i tu problem, "znam tylko Delphi") i na tej podstawie piszę kod, który jest zgodny składniowo z Delphi.
Z reguły właśnie tak to wygląda, tyle że najpierw warto sprawdzić, czy biblioteka dołączona do IDE posiada już importy funkcji i całą wymaganą otoczkę (m.in. struktury i stałe) – szkoda tracić czas na coś, co już jest zrobione.
Jeśli jednak biblioteka importów nie zawiera, to trzeba sobie znaleźć opis funkcji na msdn, a następnie dopisać import (statyczny lub ładowanie dynamiczne – w zależności od wymagań), w razie potrzeby również zadeklarować struktury danych. Typy danych wykorzystywane powszechnie w funkcjach WinAPI, takie jak np. UINT
, WINBOOL
itd., na pewno znajdują się w module Windows
, więc można z nich korzystać, a część z nich jest identyczna jak natywne typy pascalowe (np. Pointer
czy LongInt
). Problemem mogą być stałe, bo te nie są opisywane na msdn, więc trzeba się posiłkować wyszukiwarką i ich wartości po prostu szukać.
Może inaczej. Jeżeli ktoś z Was chciałby pokazać mi łopatologicznie jak to robi w swoim wydaniu, na podstawie przykładu z życia wziętego :-)
Jakiś czas temu, na potrzeby swojego tetrisowego softu chciałem skorzystać z funkcji ”przerabiającej” okno na wielowarstwowe, co wykonuje się za pomocą funkcji UpdateLayeredWindow
. Efektem użycia tej funkcji jest sprawienie, aby splash screen obsługiwał półprzezroczystość – pisałem nawet o tym artykuł na blogu. Jednak w bibliotece Lazarusa funkcja ta nie jest importowana, więc musiałem sam dodać taki import i zrobiłem to tak jak opisałem w poprzednim paragrafie – nie było żadnych problemów.
Inny przykład – dotyczący tej samej aplikacji – to import funkcji rejestrującej i wyrejestrowującej font z pliku. Mowa o funkcjach AddFontResourceExW
i RemoveFontResourceExW
, których importów również brakuje w bibliotece. Znów zrobiłem tak jak opisałem wyżej, ale potrzebowałem również wartości dwóch stałych – FR_PRIVATE
i FR_NOT_ENUM
– których w bibliotece także brakuje. I tu był problem, bo na msdn nie doszukałem się ich opisu, ale za pomocą wyszukiwarki namierzyłem stary artykuł na jakimś zagranicznym blogu, w którym autor pokazał kod źródłowy z ręczną deklaracją tych stałych (co prawda w C++, ale to w niczym nie przeszkadza), a ostatecznie prawdziwość tych wartości potwierdził jeden z użytkowników tego forum, po sprawdzeniu jak to wygląda w Delphi (tam tych importów i stałych nie brakowało).
Jak widzisz, czasem trzeba się nakombinować, aby móc skorzystać z funkcji WinAPI. Niestety w przypadku Lazarusa jest ten problem, że jego biblioteki są silnie multiplatformowe, więc siła robocza dzielona jest na wiele platform, przez co wiele funkcji stricte windowsowych jeszcze nie zostało dodanych – czasem nawet takich, które w systemowym API istnieją od 20 lat. Delphi nie jest tak zaniedbane, więc w przypadku używania tego środowiska, rzadziej zachodzi potrzeba ręcznego dodawania importów.