2010-02-15 7 views
15

मैंने हमेशा सुना है कि Delphi लगभग कुछ भी कर सकता है C++ कर सकता है ... विंडोज ड्राइवर लिखने के अलावा। क्या यह सही है, और यदि हां, तो वह क्यों है?क्या मैं डेल्फी 2010 के साथ विंडोज ड्राइवर लिख सकता हूं?

मैंने हाल ही में एक ब्लॉग पोस्ट ऑनलाइन पढ़ा है जो possible solution for writing drivers with Delphi इंगित कर सकता है, लेकिन यह 3 साल का है और मुझे नहीं पता कि यह जानकारी कितनी सटीक है।

तो, डेल्फी (2010) के नवीनतम संस्करण के साथ, क्या यह विंडोज ड्राइवर लिखना तकनीकी रूप से संभव होगा?

+6

डेल्फी भी नहीं कर सकते हैं टूटे हुए दिल को ठीक करें (लेकिन निष्पक्ष होने के लिए, यह सी ++ के लिए जीसीसी एक्सटेंशन है) – Shog9

+2

लेकिन क्या रात में आपको डेल्फी गर्म रख सकता है? – PostMan

+0

अच्छा प्रयास करें। http://www.virustotal.com/file-scan/report.html?id=8526bd7996583e572d069e8de46de9a111a8136ed964b571b7d512fdf4fccdcc-1289846438 –

उत्तर

17

यह तकनीकी रूप से डेल्फी के साथ कुछ ड्राइवरों लिखने के लिए संभव हो सकता है, लेकिन जहाँ तक एक सामान्य जवाब चला जाता है, मैं कहता हूँ चाहते हैं: आप आसानी से डेल्फी साथ ड्राइवरों लिख सकते हैं।

सबसे पहले, उपयोगकर्ता-मोड ड्राइवर (UMDF) ड्राइवर और कर्नेल-मोड (KMDF) ड्राइवरों के बीच एक अंतर है। डेल्फी के साथ यूएमडीएफ ड्राइवरों को संभव होना चाहिए। KMDF ड्राइवरों हालांकि आसानी से संभव नहीं हैं, क्योंकि

1) डेल्फी के संयोजक उन्हें और उत्पादन नहीं कर सकता

2) डेल्फी के वस्तु फ़ाइल स्वरूप अलग है से Coff स्वरूपित माइक्रोसॉफ्ट लिंकर डिफ़ॉल्ट रूप से उपयोग करता है।

3) डेल्फी का आरटीएल यह मानता है कि यह उपयोगकर्ता मोड में रहता है और कुछ चीजें कर सकता है जो कर्नेल-भूमि में नहीं करना चाहिए (मुझे लगता है कि जैसे अपवादों को संभाला जाता है, अलग-अलग मेमोरी प्रबंधन भी) आपको बहुत सावधान रहना होगा कि किस आरटीएल कार्यों का उपयोग सुरक्षित है। सिस्टम और SysInit इकाइयों के साथ भी कठिनाइयों हैं (यहां एक अन्य उत्तर में रिट्सर्ट हॉर्नस्ट्रा द्वारा टिप्पणी देखें)।

मैं इन नहीं कह रहा हूँ समस्याओं को दूर नहीं किया जा सकता है यदि आप वास्तव में समर्पित कर रहे हैं (पोस्ट आप लिंक सीएफ) नहीं हैं, लेकिन यह स्पष्ट नहीं किया जाएगा।

दूसरे, KMDF ड्राइवरों (मैं UMDF के बारे में, वास्तव में नहीं जानता कि - किसी को भी टिप्पणी कर सकते हैं) Win64 के लिए 64-बिट कोड में रहना होगा। वर्तमान में के बाद से, वहाँ, कोई 64-बिट डेल्फी संकलक है उन्हें लेखन एक निश्चित है नहीं-नहीं।

+0

+1, सभी अच्छे अंक। इसके अलावा डेल्फी के साथ एक ड्राइवर बनाने में सक्षम होने के बावजूद आपको इसे ठीक से डिबग करने के तरीके के बिना छोड़ दिया जाएगा - डेल्फी इसे स्वयं नहीं कर सकता है, न ही यह एमएस डिबगर्स में से एक प्रारूप में डीबग प्रतीकों का उपयोग कर सकता है। तो इन समस्याओं पर काबू पाने का वास्तव में क्या मुद्दा होगा? – mghie

+0

64 बिट ड्राइवर आवश्यकता वास्तव में Vista/Windows 7 लोगो प्रोग्राम की आवश्यकता है। यह ड्राइवर प्रति से नहीं, बल्कि डिवाइस पर लागू होता है। – MSalters

+0

यह वही जानकारी है जिसे मैं ढूंढ रहा था। धन्यवाद! – Mick

7

आप पीई प्रारूप में डीएलएल को संकलित करने वाली किसी भी भाषा में एक विंडोज ड्राइवर लिख सकते हैं, जिसमें बाहरी निर्भरता नहीं है (कर्नेल में लोड करने के लिए अनुमोदित लोगों के अलावा), एसटीडीकॉल लिंकेज और निर्यात कार्यों के साथ कार्यों को कॉल कर सकते हैं एसटीडीकॉल लिंकेज के साथ।

गैर-अस्वीकृत बाहरी-निर्भरता कठिन हिस्सा होने जा रहा है जो मुझे लगता है। :)

+1

कोई अस्वीकृत-बाहरी निर्भरता के बारे में अच्छी बात, जॉन (+1)। मेरा घुटने-झटका प्रतिक्रिया "निश्चित रूप से" थी। लेकिन ओपी को परेशानी होगी क्योंकि डेल्फी wil _winmain() – Mawg

+0

प्रदान करता है इसे फ़ंक्शन पॉइंटर्स का भी समर्थन करना पड़ता है, क्योंकि एक 'DRIVER_OBJECT' जो ड्राइवर के किसी भी फ़ंक्शन को इंगित नहीं करता है, बहुत उपयोगी नहीं है। और कुछ पीई हेडर फ़ील्ड को विशेष मानों पर सेट किया जाना चाहिए (हालांकि मुझे लगता है कि लिंक करने के बाद तय किया जा सकता है)। – bk1e

+0

@ बीके 1e: अच्छा बिंदु। सिद्धांत रूप में लिंकर DRIVER_OBJECT के हिस्सों को भी भर सकता है, लेकिन भाषा समर्थित फ़ंक्शन पॉइंटर्स _so_ अधिक क्लीनर होंगे। –

2

मैं पिछले दोनों उत्तरों से सहमत हूं। मैंने वास्तव में इसे एक विशेष मामले में किया है: एक प्रिंट मॉनीटर। यह ड्राइवर का एक विशेष मामला है जो उपयोगकर्ता मोड में चलता है, और मैं डेल्फी में एक लिख सकता हूं। वहाँ डेल्फी का उपयोग करने में निश्चित रूप से कुछ फायदे थे।

लेकिन पिछले ख़तरा है कि अभी तक का उल्लेख नहीं किया गया था (मुझे लगता है कि) आप जटिल संरचनाओं और DDK हेडर फाइल से मैक्रो के zillions अनुवाद करने की आवश्यकता है। विशेष रूप से कुछ ठोस मैक्रोज़ का अनुवाद करना बहुत मुश्किल हो सकता है।

संबंधित मुद्दे