दुर्भाग्यवश, सीसीओडी के बारे में बहुत कुछ दस्तावेज नहीं है जो अकेले समझ में आता है। आपको वैसा के साथ आने वाली वीएपीआई फाइलों के संयोजन के साथ इसका उपयोग करने की ज़रूरत है। मूल बात, तो आप शायद इस तरह अपने मैक्रो कुछ का उपयोग करेगा:
[CCode(cname = "FOO", cheader_filename = "blah.h")]
public extern void foo();
यहाँ हम
cname
(यानी, नाम है कि सी कोड में उत्सर्जित हो जाएगा), और
cheader_filename
(यानी, सेट कर रहे हैं
हेडर फ़ाइल जो #include
डी होना चाहिए)। अन्य सीसीओडी गुणों का नियंत्रण करता है कि सरणी कैसे नियंत्रित की जाती है। array_length = false
इंगित करता है कि एक सरणी अज्ञात लंबाई है। इसे पैरामीटर या विधि पर लागू किया जा सकता है, जो दर्शाता है कि रिटर्न प्रकार पर लागू होता है। उदाहरण के लिए:
[CCode(array_length = false)] public int[] x();
[CCode(array_null_terminated = true)] public FileStream[] y();
public int[] z();
इस उदाहरण में, x
अज्ञात सरणी लंबाई जबकि y
FILE **y(void)
की उम्मीद सी प्रोटोटाइप के साथ एक अशक्त-समाप्त सारणी रखने के लिए माना जाता है है और int *x(void)
का एक उम्मीद सी प्रोटोटाइप होगा,। अंत में, z
एक सरणी लंबाई बाहर पैरामीटर (यानी, int *z(int *length)
के एक प्रोटोटाइप है, जहां length
जहां लौटे सरणी।
ये सब भी मानकों को लागू किया जा सकता है की लंबाई को स्टोर करने के लिए एक सूचक है मानी जाती है। यह भी अगर वहाँ एक सरणी की लंबाई, लेकिन यह तर्क तुरंत सरणी के बाद नहीं है array_length_pos
निर्दिष्ट करने के लिए उपयोगी है। एक पैरामीटर एक प्रतिनिधि है, तो target_pos
निर्दिष्ट करता है जहां उपयोगकर्ता डेटा पारित हो जाता है (यानी, void*
कि समारोह सूचक के साथ चला जाता)
प्रतिनिधियों, वर्गों और structs के साथ उपयोग के लिए कई प्रकार के सीसीओडी विशेषताओं भी हैं। instance_pos
निर्दिष्ट करता है कि कहां वर्ग/संरचना उदाहरण या प्रतिनिधि उपयोगकर्ता डेटा जाता है। सभी स्थिति तर्क एक फ़्लोटिंग पॉइंट नंबर के साथ निर्दिष्ट हैं। यह एकाधिक पदों को एन्कोड करने की अनुमति देता है। उदाहरण के लिए, मान लीजिए हम एक सी प्रोटोटाइप था:
void foo(void* userdata, int length, double *dbl_array, void(*handler)(double,void*));
तो हम इस बारे में हो सकता है:
[CCode(cname = "foo")]
public void foo([CCode(array_length_pos = 0.2)] double[] array, [CCode(target_pos = 0.1)] Handler func);
को देखते हुए Handler
कहीं और एक प्रतिनिधि के रूप में परिभाषित किया गया है, तो आप देख सकते हैं कि pos
मूल्यों के बाद तर्क रखा तर्क 0 (यानी, शुरुआत) और फिर एक विशेष क्रम में।
वर्ग और structs initialisation, विनाश, और संदर्भ गिनती को संभालने के लिए कार्य करता है, लेकिन उन लोगों के लिए काफी सीधे आगे हैं। जेनरिक हैंडलिंग भी थोड़ा जटिल है। फिर, VAPIs अंतर्दृष्टि का सबसे अच्छा स्रोत हैं।हालांकि, यह आपके मूल सी कार्यों और मैक्रोज़ पर शुरू करने के लिए पर्याप्त है।
मुझे और दस्तावेज मिला: https://live.gnome.org/Vala/Manual/Attributes#CCode_Attribute –