यह कमांड क्रिएट-नेटिव-मैप है जिसे हमारे कई मुफ्त ऑनलाइन वर्कस्टेशन जैसे कि उबंटू ऑनलाइन, फेडोरा ऑनलाइन, विंडोज ऑनलाइन एमुलेटर या मैक ओएस ऑनलाइन एमुलेटर का उपयोग करके ऑनवर्क्स फ्री होस्टिंग प्रदाता में चलाया जा सकता है।
कार्यक्रम:
नाम
क्रिएट-नेटिव-मैप - सी/सी# मैपिंग क्रिएटर
SYNOPSIS
मूल-मानचित्र बनाएँ [विकल्प]* असेंबली-फ़ाइल-नाम आउटपुट-उपसर्ग
विकल्प
--ऑटोकॉन्फ़-हेडर=हेडर
हैडर सिंटैक्स में एक हेडर फ़ाइल नाम है जो आमतौर पर सी के साथ प्रयोग किया जाता है # शामिल
कथन, उदा # शामिल or # शामिल "स्थानीय.एच" .
सम्मिलित नाम से एक ऑटोकॉन्फ़-स्वरूपित मैक्रो उत्पन्न होता है, और a # शामिल
निर्देश एक के भीतर लपेटा गया है #ifdef के भीतर ऑटोकॉन्फ मैक्रो के लिए ब्लॉक करें
उत्पन्न .c फ़ाइल.
उदाहरण के लिए, --ऑटोकॉन्फ़-हेडर= कोड जनरेट करेगा:
#ifndef HAVE_STDIO_H
#शामिल
#endif /* ndef HAVE_STDIO_H */
--autoconf-सदस्य=सदस्य
निर्दिष्ट करें कि कोई भी पहुंच सदस्य के भीतर लपेटा जाना चाहिए #ifdef सदस्य हैं
ब्लॉक। सदस्य या तो एक हो सकता है कार्यक्षेत्र नाम या एक कक्षा का नाम . कार्यक्षेत्र नाम
मेल।
उदाहरण के लिए, C# घोषणा दी गई:
[मोनो.यूनिक्स.नेटिव.मैप ("स्ट्रक्चर डायरेक्ट")]
संरचना डायरेंट {
सार्वजनिक लंबे समय तक d_off;
}
फिर --autoconf-सदस्य=d_off इसके समान कोड जनरेट करेगा:
int
टूडायरेंट (स्ट्रक्चर डायरेक्ट *फ्रॉम, स्ट्रक्चर डायरेक्ट *टू)
{
#ifdef HAVE_STRUCT_DIRENT_D_OFF
to->d_off = from->d_off;
#endif /* ndef HAVE_STRUCT_DIRENT_D_OFF */
}
--बहिष्कृत-मूल-प्रतीक=प्रतीक
प्रतीक एक [डीएलआयात] -चिह्नित विधि जो होनी चाहिए नहीं एक प्रोटोटाइप तैयार किया गया है
इसके लिए।
--इम्प्ल-हेडर=हेडर
सम्मिलित करें # शामिल उत्पन्न के भीतर बयान .c के लिए दर्ज हैडर .
उदाहरण के लिए, --इम्प्ल-हेडर= उत्पन्न करता है
#शामिल
--इम्प्ल-मैक्रो=मैक्रो
सम्मिलित करें #define उत्पन्न के भीतर बयान .c फ़ाइल. मैक्रो एक शामिल हो सकता है = सेवा मेरे
मैक्रो नाम को मैक्रो मान से अलग करें।
उदाहरण के लिए, --इम्प्ल-मैक्रो=FOO=42 उत्पन्न करता है
#FOO 42 को परिभाषित करें
--लाइब्रेरी=लाइब्रेरी
के लिए प्रोटोटाइप बनाएं [डीएलआयात] -चिह्नित विधियाँ जो मूल निवासी का संदर्भ देती हैं
पुस्तकालय लाइब्रेरी उत्पन्न में .h फ़ाइल.
--पब्लिक-हेडर=हेडर
सम्मिलित करें # शामिल उत्पन्न के भीतर बयान .h के लिए दर्ज हैडर .
उदाहरण के लिए, --पब्लिक-हेडर= उत्पन्न करता है
#शामिल
--सार्वजनिक-मैक्रो=मैक्रो
सम्मिलित करें #define उत्पन्न के भीतर बयान .h फ़ाइल. मैक्रो एक शामिल हो सकता है = सेवा मेरे
मैक्रो नाम को मैक्रो मान से अलग करें।
उदाहरण के लिए, --पब्लिक-मैक्रो=FOO=42 उत्पन्न करता है
#FOO 42 को परिभाषित करें
--नाम बदलें-सदस्य=FROM=TO
इसका प्रयोग तब किया जाता है जब से एक सी मैक्रो है, और इस प्रकार उपयोग करने के लिए इसे बदला जाना चाहिए
समझदारी से। प्रबंधित प्रतिनिधित्व के लिए सभी जेनरेट किए गए संदर्भों का उपयोग किया जाएगा सेवा मेरे बजाय
of से .
उदाहरण के लिए, C# घोषणा दी गई:
[मोनो.यूनिक्स.नेटिव.मैप ("स्ट्रक्चर स्टेट")]
संरचना स्टेट {
सार्वजनिक लंबी अवधि;
}
और तर्क --नाम बदलें-सदस्य=st_atime=st_atime_ , उत्पन्न .h फ़ाइल होगी
होते हैं:
संरचना स्टेट {
gint64 st_atime_;
};
(परिवर्तित फ़ील्ड नाम नोट करें), जबकि जेनरेट किया गया है .c फ़ाइल में शामिल होगा:
ToStat (स्ट्रक्चर स्टेट *से, स्ट्रक्चर स्टेट *टू)
{
to->st_atime_ = from->st_atime;
}
--नाम-नामस्थान=FROM=TO
डिफ़ॉल्ट रूप से, C "नेमस्पेस" (प्रतीक उपसर्ग) C# नेमस्पेस है; के भीतर प्रकार
सी# नेमस्पेस मोनो.यूनिक्स.नेटिव सी "नेमस्पेस" में होगा मोनो_यूनिक्स_नेटिव . उपयोग
--नाम बदलें-नामस्थान डिफ़ॉल्ट को संशोधित करने के लिए, उदा --नाम बदलें-
नेमस्पेस=मोनो.यूनिक्स.नेटिव=मोनो_पॉसिक्स .
वर्णन
मूल-मानचित्र बनाएँ एक विशिष्ट परिदृश्य के लिए एक कार्यक्रम है: कोड को कसकर रखना
C# प्रकारों के आधार पर, C और C# के बीच एक दूसरे के साथ तालमेल बिठाया जाता है।
प्लेटफ़ॉर्म इनवोक केवल तभी उपयोगी है जब प्रबंधित कोड सभी के सटीक प्रकार और लेआउट को जानता हो
यह अप्रबंधित संरचनाओं का उपयोग करता है। यह आमतौर पर विंडोज़ पर मामला है, लेकिन यह है नहीं मामला
यूनिक्स पर. उदाहरण के लिए, struct स्टेट ऐसे आकारों का उपयोग करता है जो अलग-अलग होंगे
प्लेटफ़ॉर्म से प्लेटफ़ॉर्म (या यहां तक कि परिभाषित कंपाइलर मैक्रोज़ पर आधारित!)। उदाहरण के लिए, ऑफ_टी
आमतौर पर ILP32 प्लेटफ़ॉर्म पर एक हस्ताक्षरित 32-बिट पूर्णांक होता है, लेकिन एक हस्ताक्षरित 64-बिट पूर्णांक भी हो सकता है
एलपी64 प्लेटफॉर्म पर, लेकिन आईएलपी64 प्लेटफॉर्म पर 32-बिट हस्ताक्षरित पूर्णांक भी हो सकता है यदि
_FILE_OFFSET_BITS मैक्रो का मान 64 है। संक्षेप में, यूनिक्स के भीतर सब कुछ लचीला है,
और प्रबंधित कोड ऐसे लचीलेपन से नहीं निपट सकता।
इस प्रकार, के लिए आला मूल-मानचित्र बनाएँ : एक निश्चित एबीआई मान लें जिसे प्रबंधित कोड लक्षित कर सकता है,
और संबंधित मूल निवासी के लिए प्रबंधित अभ्यावेदन को "थंक" करने के लिए कोड उत्पन्न करें
अभ्यावेदन. इसके लिए ऐसा करने की जरूरत है सब कुछ यह प्लेटफ़ॉर्म और के बीच भिन्न हो सकता है
संकलक झंडे, गणना मूल्यों से ( सिगबस फ्रीबीएसडी पर इसका मूल्य 10 है लेकिन चालू पर 7 है
लिनक्स) सदस्यों की संरचना करने के लिए (कितना बड़ा है ऑफ_टी ?)।
मूल-मानचित्र बनाएँ निरीक्षण करेंगे असेंबली-फ़ाइल-नाम और निम्न फ़ाइलें आउटपुट करें:
आउटपुट-उपसर्ग.एच
इसमें गणना मान, वर्ग और संरचना घोषणाएँ, प्रतिनिधि शामिल हैं
घोषणाएँ, और [डीएलआयात] -चिह्नित विधियाँ (द्वारा निर्दिष्ट लाइब्रेरी से
--पुस्तकालय ) विधानसभा के भीतर असेंबली-फ़ाइल-नाम .
आउटपुट-PREFIX.c
इसमें गणना और संरचना रूपांतरण का कार्यान्वयन शामिल है
कार्य करता है.
आउटपुट-PREFIX.cs
एक आंशिक वर्ग शामिल है नेटिवकन्वर्ट जिसमें गणना अनुवाद शामिल है
तरीकों.
आउटपुट-PREFIX.xml
गणना अनुवाद के लिए ECMA XML दस्तावेज़ स्टब्स उत्पन्न करता है
में तरीके आउटपुट-PREFIX.cs .
मूल-मानचित्र बनाएँ मुख्य रूप से तलाश करता है मानचित्र विशेषता -सजाए गए प्रकार, और दो का उपयोग करता है
मानचित्र विशेषता गुण:
मूल प्रकार
संबंधित C प्रकार शामिल है। केवल तभी उपयोगी जब इसे कक्षाओं पर लागू किया जाए,
संरचनाएँ, और क्षेत्र।
झंडे दबाएँ
जब किसी गणना सदस्य पर निर्दिष्ट किया जाता है [झंडे] -सुशोभित गणना
प्रकार, अक्षम बिट-मास्किंग गणना के लिए सामान्य कोड जनरेटर समर्थन
प्रकार के।
यह तब उपयोगी होता है जब बिटमास्क और गैर-बिटमास्क जानकारी को इसमें संग्रहीत किया जाता है
गैर-बिटमास्क के लिए समान प्रकार और बिटमास्क जाँच का उपयोग नहीं किया जाना चाहिए
मूल्य. उदाहरण: Mono.Unix.Native.FilePermissions.S_IFREG , जो एक नहीं है
बिटमास्क मान, जबकि अधिकांश फ़ाइल अनुमतियाँ बिटमास्क मान शामिल हैं (
FilePermissions.S_IRUSR , FilePermissions.S_IWUSR , आदि).
RSI मानचित्र विशेषता विशेषता को कक्षाओं, संरचनाओं, प्रतिनिधियों, फ़ील्ड्स आदि पर निर्दिष्ट किया जा सकता है
गिनती
प्रतिनिधियों
प्रतिनिधियों के लिए कोड जनरेशन इस पर ध्यान नहीं देता MapAttribute.NativeType संपत्ति, और
एक फ़ंक्शन पॉइंटर उत्पन्न करता है टंकण यह प्रतिनिधि घोषणा से सबसे अच्छी तरह मेल खाता है
में .h फ़ाइल.
उदाहरण के लिए,
नेमस्पेस फू {
[नक्शा]
प्रतिनिधि स्ट्रिंग MyCallback (स्ट्रिंग एस);
}
उत्पन्न करता है टंकण :
टाइपपीफ चार * (* Foo_MyCallback) (स्थिरांक चार * एस);
कक्षाएं और संरचनाएं
A [नक्शा] -सजाए गए वर्ग या संरचना को सी संरचना घोषणा मिलेगी
.h फ़ाइल:
[नक्शा]
संरचना फू {
सार्वजनिक int i;
}
हो जाता है
संरचना फू {
सार्वजनिक int i;
};
अगर MapAttribute.NativeType प्रॉपर्टी सेट है, तो रूपांतरण फ़ंक्शन होंगे
के अंतर्गत घोषित किया गया .h फ़ाइल और के भीतर बनाया गया .c फ़ाइल:
नेमस्पेस फू {
[मानचित्र ("संरचना स्टेट")]
संरचना स्टेट {
सार्वजनिक uint st_uid;
}
}
हो जाता है
/* .h फ़ाइल */
संरचना Foo_Stat {
अहस्ताक्षरित int st_uid;
};
int
Foo_FromStat (struct Foo_Stat *से, struct stat *से);
int
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to);
/* .c फ़ाइल */
int
Foo_FromStat (struct Foo_Stat *से, struct stat *से)
{
मेमसेट (से, 0, आकार(*से);
to->st_uid = from->st_uid;
0 वापसी;
}
int
Foo_ToStat (स्ट्रक्चर स्टेट *टू, sxtruct Foo_Stat *टू)
{
मेमसेट (से, 0, आकार(*से);
to->st_uid = from->st_uid;
0 वापसी;
}
कक्षाओं के लिए, रूपांतरण फ़ंक्शन केवल कक्षा में घोषित फ़ील्ड की प्रतिलिपि बनाएंगे
अपने आप। मूल कक्षाओं में घोषित फ़ील्ड की प्रतिलिपि नहीं बनाई जाएगी। (यह है क्योंकि
मूल-मानचित्र बनाएँ यह नहीं पता कि सी में वंशानुक्रम कैसे लागू किया जाता है
मूल वर्गों से फ़ील्ड की प्रतिलिपि बनाना रूपांतरण के कॉलर पर छोड़ दिया गया है
कार्य.)
फ़ील्ड्स यदि किसी फ़ील्ड (1) में है मानचित्र विशेषता विशेषता, और (2) में है
MapAttribute.NativeType प्रॉपर्टी सेट, फिर निर्दिष्ट मूल प्रकार का उपयोग किया जाएगा
अतिप्रवाह जाँच के लिए. उदाहरण के लिए:
नेमस्पेस फू {
[मानचित्र ("संरचना स्टेट")]
संरचना स्टेट {
[मानचित्र ("off_t")] सार्वजनिक लंबा st_size;
}
}
उत्पन्न करता है
/* .h फ़ाइल */
संरचना Foo_Stat {
gint64 st_size;
};
int
Foo_FromStat (struct Foo_Stat *से, struct stat *से);
int
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to);
/* .c फ़ाइल */
int
Foo_FromStat (struct Foo_Stat *से, struct stat *से)
{
_cnm_return_val_if_overflow (off_t, from->st_size, -1);
मेमसेट (से, 0, आकार(*से);
to->st_size = from->st_size;
0 वापसी;
}
int
Foo_ToStat (स्ट्रक्चर स्टेट *टू, sxtruct Foo_Stat *टू)
{
_cnm_return_val_if_overflow (gint64, from->st_size, -1);
मेमसेट (से, 0, आकार(*से);
to->st_size = from->st_size;
0 वापसी;
}
यह रूपांतरण कार्यों में बेहतर त्रुटि जाँच के लिए उपयोगी है।
MapAttribute.NativeType इसके लिए यह आवश्यक है क्योंकि यह जानने का कोई अन्य तरीका नहीं है
मूल प्रकार है (सिस्टम हेडर फ़ाइलों को पार्स किए बिना...)।
गणना
के भीतर प्रत्येक सदस्य के लिए एक सी गणना और मैक्रोज़ उत्पन्न करता है
गणना सेवा मेरे और से कार्यों को भी घोषित किया गया है .h फ़ाइल और
में लागू किया गया .c फ़ाइल.
उदाहरण के लिए,
नेमस्पेस फू {
[नक्शा]
एनम इरनो {
EINVAL
}
}
में निम्नलिखित उत्पन्न करेगा .h फ़ाइल:
enum Foo_Errno {
Foo_Errno_EINVAL = 0,
#Foo_Errno_EINVAL Foo_Errno_EINVAL को परिभाषित करें
};
int Foo_FromErrno (int from, int *to);
int Foo_ToErrno (int से, int *to);
और निम्नलिखित उत्पन्न करता है .c फ़ाइल:
int
Foo_FromErrno (int from, int *to)
{
*से = 0;
यदि (से == Foo_Errno_EPERM)
#ifdef EINVAL
{*से = EINVAL;}
#else
{errno = EINVAL; वापसी -1;}
#endif
0 वापसी;
}
int
Foo_ToErrno (int from, int *to)
{
*से = 0;
#ifdef EINVAL
यदि (से == EINVAL)
{*से = Foo_Errno_EPERM; वापसी 0;}
#endif
वापसी -1;
}
यदि प्रबंधित एनम एक है तो अलग कोड उत्पन्न किया जाएगा [झंडे] -सजा हुआ
गणना (बिटवाइज़ फ़्लैग को ध्यान में रखते हुए), लेकिन यह मूल विचार है।
डाक सूचियों
visit http://lists.ximian.com/mailman/listinfo/mono-devel-list ब्योरा हेतु।
वेब साइट
visit http://www.mono-project.com ब्योरा हेतु
मूल-मानचित्र बनाएँ(1)
onworks.net सेवाओं का उपयोग करके ऑनलाइन क्रिएट-नेटिव-मैप का उपयोग करें