मैं एक सी एपीआई बना रहा हूं जो एक डीएलएल फ़ाइल में कुछ कार्यक्षमता छुपाता है।सी इंटरफेस में हैंडल के लिए सही प्रकार
चूंकि सब कुछ अंदर सी ++ है, अधिकांश कार्यों में हैंडल के खिलाफ काम करता है जो सीधे एपीआई के अंदर इस पॉइंटर्स को मानचित्र करता है।
उन हैंडल के लिए प्रकार सुरक्षा की कुछ डिग्री प्राप्त करने के लिए मैं उन्हें इस तरह परिभाषित करते हैं:
typedef struct MyType1* MyType1Handle;
typedef struct MyType2* MyType2Handle;
मैं वास्तव में किसी भी स्थान पर MyType1 या MyType2 परिभाषित नहीं करते के बाद से मैं सिर्फ उन्हें संकेत के रूप में इस्तेमाल करते हैं और एक कर एपीआई के अंदर वास्तविक सूचक प्रकार के लिए कास्ट टाइप करें।
मेरे समस्या यह है कि जब दृश्य स्टूडियो में एक clr परियोजना में मेरी लाइब्रेरी का उपयोग कर मैं इस warning: unresolved typeref token (token) for 'type'; image may not run.
http://msdn.microsoft.com/en-us/library/h8027ys9(VS.80).aspx
यह कोई बड़ी बात नहीं है, क्योंकि यह काम करता है प्राप्त है, लेकिन यह अव्यवसायिक लग रहा है।
मैं शून्य * का उपयोग कर पसंद नहीं है:
typedef void* MyType1Handle;
typedef void* MyType2Handle;
यह यह संभव एक MyType2Handle के साथ एक MyType1Handle चाहते हैं क्योंकि वे वास्तव में एक ही प्रकार के होते हैं एक समारोह कॉल करने के लिए बनाता है।
एक और दृष्टिकोण मैं का उपयोग नहीं करना चाहते हैं तो इस
typedef int MyType1Handle;
typedef int MyType2Handle;
की तरह कुछ यह ठीक जब तक पूर्णांक के और संकेत दिए गए एक ही आकार है काम करेंगे, लेकिन यह हमेशा ऐसा नहीं है और यह वहाँ की तरह लगता है प्लेटफ़ॉर्म विशिष्ट पॉइंटर आकार पूर्णांक प्राप्त करने का कोई मूर्ख तरीका नहीं है। यह वही प्रकार की सुरक्षा समस्याएं हैं जो शून्य * के रूप में भी हैं।
एक और दृष्टिकोण मैंने कोशिश की इस तरह यह करने के लिए किया गया था:
struct MyType1{};
typedef struct MyType1* MyType1Handle;
यह सी में काम नहीं किया खाली structs के बाद से अवैध सी कोड है। मैं निश्चित रूप से एक डमी सदस्य के साथ अपनी संरचना का विस्तार कर सकता था, लेकिन ऐसा लगता है कि ऐसा करने का एक बेहतर तरीका होना चाहिए।
तो मेरे सवाल करने पर निर्भर करता:
कैसे आप आमतौर पर सबसे अधिक संगत रास्ते में प्रकार इस तरह का उल्लेख करूं?
जवाब के लिए धन्यवाद। ऐसा लगता है कि मैं इस समस्या में कम से कम पहली बार नहीं हूं :) – Laserallan
यहां एक अंतर यह है कि सार्वजनिक शीर्षकों में, हैंडल प्रकार एक ठोस प्रकार का संदर्भ देता है। नकली संरचना पूरी तरह से परिभाषित है। बेशक, कार्यान्वयन में उन फ़ाइलों को शामिल करते समय वे DECLARE_HANDLE को अलग-अलग परिभाषित करते हैं। – RBerteig