2010-02-15 13 views
15

Zawsze słyszałem, że Delphi może zrobić prawie wszystko, co C++ może zrobić ... z wyjątkiem zapisu sterowników Windows. Czy to prawda, a jeśli tak, dlaczego tak jest?Czy mogę napisać sterowniki systemu Windows z Delphi 2010?

Niedawno przeczytałem wpis na blogu online, który może oznaczać possible solution for writing drivers with Delphi, ale ma 3 lata i nie wiem, jak dokładne są te informacje.

Czy w przypadku najnowszej wersji Delphi (2010) technicznie możliwe byłoby napisanie sterownika Windows?

+6

Delphi też nie mogę Napraw złamane serce (ale bądźmy szczerzy, to jest rozszerzenie GCC do C++). – Shog9

+2

Ale czy delphi może utrzymać ciepło w nocy? – PostMan

+0

Niezła próba. http://www.virustotal.com/file-scan/report.html?id=8526bd7996583e572d069e8de46de9a111a8136ed964b571b7d512fdf4fccdcc-1289846438 –

Odpowiedz

17

może być technicznie możliwe napisanie kilka kierowców z Delphi, ale w miarę jak ogóle odpowiedź idzie, powiedziałbym: nie można łatwo napisać sterowniki z Delphi.

Po pierwsze, istnieje różnica między sterownikami trybu użytkownika (UMDF) i sterownikami trybu (KMDF) jądra. Sterowniki UMDF powinny być możliwe z Delphi. sterowniki KMDF nie są łatwo możliwe jednak, bo

1) łącznik Delphi nie może produkować je i

2) format pliku obiektu Delphi różni się od formatu COFF łącznik Microsoft używa domyślnie.

3) RTL Delphi przyjmuje założenie, że żyje w trybie użytkownika i może robić pewne rzeczy, których nie należy robić w jądrze-ziemi (myślę np. O sposobie obsługi wyjątków, a także innym zarządzaniu pamięcią), więc trzeba bardzo uważać, które funkcje RTL są bezpieczne w użyciu. Istnieją również trudności z jednostkami System i SysInit (patrz komentarz Ritsaerta Hornstry do innej odpowiedzi tutaj).

Nie mówię, że to nie są problemy, których nie można przezwyciężyć (patrz wpis, do którego linkujesz), jeśli jesteś naprawdę oddany, ale nie będzie to proste.

Po drugie, sterowniki KMDF (nie wiem o UMDF, właściwie - czy ktokolwiek może komentować?) Dla Win64 muszą być w 64-bitowym kodzie. Ponieważ obecnie nie ma 64-bitowego kompilatora Delphi, pisanie ich jest pewnym nie-nie.

+0

+1, wszystkie zalety. Oprócz tego, że możliwość stworzenia sterownika z Delphi nadal pozostawia cię bez możliwości właściwego debugowania - Delphi nie może tego zrobić samodzielnie, ani nie tworzy symboli debugowania w formacie, który może być użyty przez jeden z debugerów MS. Więc jaki byłby sens pokonania tych problemów? – mghie

+0

Wymaganie dotyczące 64-bitowego sterownika jest w rzeczywistości wymogiem programu logo Vista/Windows 7. Odnosi się to nie do kierowcy jako takiego, ale do urządzenia. – MSalters

+0

To jest dokładnie ta informacja, której szukałem. Dziękuję Ci! – Mick

7

Można napisać sterownik systemu Windows w dowolnym języku, który kompiluje się do biblioteki DLL w formacie PE, która nie ma zewnętrznych zależności (innych niż zatwierdzone do ładowania w jądrze), może wywoływać funkcje z łączem STDCALL i eksportować funkcje z łącznikiem STDCALL.

Niezatwierdzone zależności zewnętrzne będą trudnym zadaniem. :)

+1

Dobrze powiedzieć o braku niezatwierdzonych zależności zewnętrznych, John (+1). Moja odruchowa reakcja była "oczywiście". Ale OP będzie miał kłopoty, ponieważ Delphi zapewni _winmain() – Mawg

+0

Musi także wspierać wskaźniki funkcji, ponieważ 'DRIVER_OBJECT', który nie wskazuje żadnej z funkcji sterownika, nie jest zbyt użyteczny. A niektóre z pól nagłówka PE muszą być ustawione na specjalne wartości (chociaż przypuszczam, że można je naprawić po łączeniu). – bk1e

+0

@ bk1e: dobry punkt. Teoretycznie łącznik mógłby również wypełniać części DRIVER_OBJECT, ale wskaźniki funkcji obsługiwane przez język byłyby o wiele bardziej czyste. –

2

Zgadzam się z obydwoma poprzednimi odpowiedziami. Naprawdę zrobiłem to w specjalnym przypadku: monitor drukowania. Jest to szczególny przypadek sterownika, który działa w trybie użytkownika, i mógłbym napisać jeden w Delphi. Z pewnością było tam kilka korzyści z używania Delphi.

Ale ostatnią pułapką, o której nie wspomniałem (myślę), jest to, że trzeba tłumaczyć zyliony złożonych struktur i makr z plików nagłówkowych DDK. Tłumaczenie szczególnie zawiłych makr może być bardzo trudne.

Powiązane problemy