क्या सी हेडर से .net के लिए स्वचालित रूप से पी/आवेक रैपर बनाने का कोई तरीका है?स्वचालित रूप से सी हेडर से सी # रैपर बनाना?
बेशक मैं उन्हें हाथ से बना सकता हूं, लेकिन उन्हें बनाए रखना दर्दनाक होगा, और शायद मैं कहीं गलती कर दूंगा जिसके परिणामस्वरूप दुर्घटनाओं को डीबग करना मुश्किल हो जाएगा।
मैंने SWIG की कोशिश की, लेकिन इसने पूर्ण कक्षाएं बनाईं जहां सरल structs पर्याप्त होंगे। एसडब्ल्यूआईजी के साथ एक और समस्या यह है कि इसे सी पक्ष पर अतिरिक्त इंटरऑप कोड की आवश्यकता होती है।
मैं मानना चाहूंगा कि उत्पादन मोनो पर भी काम करता है, लेकिन यह आवश्यक नहीं है।
एक और चीज जिसके साथ मैं काम कर सकता हूं वह एक प्रोग्राम है जो सी हेडर को पार करता है, और एक्सएमएल जैसे अच्छे इंटरमीडिएट प्रारूप में आउटपुट बनाता है, जिससे मैं स्वयं सी # रैपर बना सकता हूं।
संपादित करें:
PInvoke इंटरऑप सहायक मुझे चाहिए।
इसके साथ कुछ छोटे मुद्दे हैं:
* यह स्ट्रिंग के लिए "हस्ताक्षरित चार *" का अनुवाद करता है जहां मैं IntPtr
* पसंद करता हूं * यह मानता है कि size_t = int = long = 32bit। यह वर्तमान में मेरे लिए सच है, लेकिन हर मंच पर सच नहीं हो सकता है।
क्या इसे ठीक करने का कोई साफ तरीका है? अन्यथा मैं इसे बदलने से पहले सी कोड पर थोड़ा सा ढूंढ और प्रतिस्थापित करूँगा।
मैं इंटरऑप सहायक से सहमत हूं। सावधान रहें कि जीयूआई में एक कष्टप्रद बग है (सीमित लंबाई, परेशान करना यदि आप कई शीर्षलेख फ़ाइलों का अनुवाद करना चाहते हैं) और बिटफील्ड के लिए जेनरेट सी # कोड न केवल बदसूरत है, बल्कि गलत है (यानी आपको * सत्यापित करना होगा बिट फ़ील्ड कोड मैन्युअल रूप से)। बिट फ़ील्ड्स को छोड़कर कुछ भी करने के लिए, मैंने इसे ठीक काम करने के लिए पाया, हालांकि कोड के साथ पहली चीज लंबी नामस्थानों को हटा देना है (प्रत्येक सिस्टम के लिए 'System.Runtime.InteropServices')। – OregonGhost
इसके साथ कुछ छोटे मुद्दे हैं। यह स्ट्रिंग में "हस्ताक्षरित चार *" का अनुवाद करता है जहां मैं IntPtr पसंद करूंगा, और मानता हूं कि int = long = 32bit। क्या इसे ठीक करने का कोई साफ तरीका है? अन्यथा मैं इसे बदलने से पहले सी कोड पर थोड़ा सा ढूंढ और प्रतिस्थापित करूँगा। – Winner
वे उन अस्पष्टताओं हैं जिन्हें मैंने आपको चेतावनी दी थी। जेनरेट पी/टॉकर घोषणा को टिंकर करने का कोई साफ तरीका सामान्य नहीं है। बीटीडब्ल्यू: अधिकांश सी/सी ++ कोड में int और long 32-बिट्स है। –