এটি হল ক্রিয়েট-নেটিভ-ম্যাপ কমান্ড যা আমাদের একাধিক বিনামূল্যের অনলাইন ওয়ার্কস্টেশন যেমন উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটর ব্যবহার করে OnWorks ফ্রি হোস্টিং প্রদানকারীতে চালানো যেতে পারে।
কার্যক্রম:
NAME এর
create-native-map - C/C# ম্যাপিং ক্রিয়েটর
সাইনোপিসিস
তৈরি-নেটিভ-মানচিত্র [বিকল্প]* এসেম্বলি-ফাইল-নাম আউটপুট-প্রিফিক্স
বিকল্প
--autoconf-header=HEADER
HEADER কোন সিনট্যাক্সের একটি হেডার ফাইলের নাম যা সাধারণত C এর সাথে ব্যবহৃত হয় # অন্তর্ভুক্ত
বিবৃতি, যেমন # অন্তর্ভুক্ত or # অন্তর্ভুক্ত "local.h" .
অন্তর্ভুক্ত নাম থেকে একটি অটোকনফ-ফরম্যাটেড ম্যাক্রো তৈরি করা হয় এবং ক # অন্তর্ভুক্ত
নির্দেশ একটি মধ্যে আবৃত করা হয় #ifdef মধ্যে Autoconf ম্যাক্রো জন্য ব্লক
উত্পন্ন .c ফাইল.
উদাহরণ স্বরূপ, --autoconf-header= কোড তৈরি করবে:
#ifndef আছে_STDIO_H
#অন্তর্ভুক্ত
#endif /*ndef HAVE_STDIO_H */
--autoconf-member=MEMBER
যে কোনো অ্যাক্সেস উল্লেখ করুন সদস্য একটি মধ্যে আবৃত করা উচিত #ifdef HAVE_MEMBER
ব্লক। সদস্য হতে পারে a ক্ষেত্র নাম বা একটি শ্রেণির নাম . ক্ষেত্র নাম
সংমিশ্রণ।
উদাহরণস্বরূপ, C# ঘোষণা দেওয়া হয়েছে:
[Mono.Unix.Native.Map ("struct dirent")]
struct Dirent {
পাবলিক লং ডি_অফ;
}
তারপর --autoconf-member=d_off অনুরূপ কোড তৈরি করবে:
কোন int
ToDirent (struct dirent *from, struct Dirent * থেকে)
{
#ifdef আছে_STRUCT_DIRENT_D_OFF
থেকে->d_off = থেকে->d_off;
#endif /*ndef HAVE_STRUCT_DIRENT_D_OFF */
}
--exclude-native-symbol=SYMBOL
SYMBOL ইহা একটি [Dllআমদানি] - চিহ্নিত পদ্ধতি যে উচিত না একটি প্রোটোটাইপ উত্পন্ন আছে
এর জন্য.
--impl-header=HEADER
Sertোকান a # অন্তর্ভুক্ত উত্পন্ন মধ্যে বিবৃতি .c জন্য ফাইল HEADER কোন .
উদাহরণ স্বরূপ, --ইমপ্ল-হেডার= উত্পন্ন
# অন্তর্ভুক্ত
--impl-macro=MACRO
Sertোকান a # define উত্পন্ন মধ্যে বিবৃতি .c ফাইল. ম্যাক্রো থাকতে পারে একটি = থেকে
ম্যাক্রো মান থেকে ম্যাক্রো নাম আলাদা করুন।
উদাহরণ স্বরূপ, --impl-macro=FOO=42 উত্পন্ন
#FOO 42 সংজ্ঞায়িত করুন
--লাইব্রেরি=লাইব্রেরি
জন্য প্রোটোটাইপ তৈরি করুন [Dllআমদানি] - চিহ্নিত পদ্ধতি যা নেটিভ উল্লেখ করে
লাইব্রেরি লাইব্রেরি উৎপন্ন মধ্যে .h ফাইল.
--public-header=HEADER
Sertোকান a # অন্তর্ভুক্ত উত্পন্ন মধ্যে বিবৃতি .h জন্য ফাইল HEADER কোন .
উদাহরণ স্বরূপ, --public-header= উত্পন্ন
# অন্তর্ভুক্ত
--public-macro=MACRO
Sertোকান a # define উত্পন্ন মধ্যে বিবৃতি .h ফাইল. ম্যাক্রো থাকতে পারে একটি = থেকে
ম্যাক্রো মান থেকে ম্যাক্রো নাম আলাদা করুন।
উদাহরণ স্বরূপ, --public-macro=FOO=42 উত্পন্ন
#FOO 42 সংজ্ঞায়িত করুন
--rename-member=FROM=TO
এই যখন ব্যবহার করা হয় থেকে একটি C ম্যাক্রো, এবং ব্যবহার করার জন্য এইভাবে পরিবর্তন করা আবশ্যক
বিচক্ষণভাবে পরিচালিত প্রতিনিধিত্বের সমস্ত উত্পন্ন রেফারেন্স ব্যবহার করবে প্রতি পরিবর্তে
of থেকে .
উদাহরণস্বরূপ, C# ঘোষণা দেওয়া হয়েছে:
[Mono.Unix.Native.Map ("struct stat")]
struct স্ট্যাট {
সর্বজনীন দীর্ঘ st_atime;
}
এবং যুক্তি --নাম-সদস্য=st_atime=st_atime_ , উত্পন্ন .h ফাইল হবে
উপস্থিত:
struct স্ট্যাট {
gint64 st_atime_;
};
(পরিবর্তিত ক্ষেত্রের নাম নোট করুন), যখন উত্পন্ন হয় .c ফাইল থাকবে:
ToStat (struct stat * থেকে, struct স্ট্যাট * থেকে)
{
to->st_atime_ = from->st_atime;
}
--rename-namespace=FROM=TO
ডিফল্টরূপে, C "নেমস্পেস" (প্রতীক উপসর্গ) হল C# নামস্থান; এর মধ্যে প্রকার
C# নামস্থান Mono.Unix.Native সি "নেমস্পেসে" থাকবে Mono_Unix_Native । ব্যবহার
--নাম-স্থান পরিবর্তন করুন ডিফল্ট পরিবর্তন করতে, যেমন --নাম পরিবর্তন-
namespace=Mono.Unix.Native=Mono_Posix .
বর্ণনাঃ
তৈরি-নেটিভ-মানচিত্র একটি নির্দিষ্ট পরিস্থিতির জন্য একটি প্রোগ্রাম: কোড রাখা যা শক্তভাবে
একে অপরের সাথে সিঙ্কে C এবং C# এর মধ্যে মিলিত, C# প্রকারের উপর ভিত্তি করে।
প্ল্যাটফর্ম ইনভোক শুধুমাত্র উপযোগী যদি পরিচালিত কোডটি সঠিক প্রকার এবং লেআউট জানে
এটি ব্যবহার করে অনিয়ন্ত্রিত কাঠামো। এটি সাধারণত উইন্ডোজের ক্ষেত্রে হয়, তবে এটি না মামলা
ইউনিক্সে। উদাহরণ স্বরূপ, struct হয় রাষ্ট্র আকারের সাথে প্রকারগুলি ব্যবহার করে যা থেকে পরিবর্তিত হবে
প্ল্যাটফর্ম থেকে প্ল্যাটফর্ম (বা এমনকি সংজ্ঞায়িত কম্পাইলার ম্যাক্রোর উপর ভিত্তি করে!) উদাহরণ স্বরূপ, বন্ধ_টি
সাধারণত ILP32 প্ল্যাটফর্মে একটি স্বাক্ষরিত 32-বিট পূর্ণসংখ্যা, তবে একটি স্বাক্ষরিত 64-বিট পূর্ণসংখ্যা হতে পারে
LP64 প্ল্যাটফর্মে, তবে ILP64 প্ল্যাটফর্মে একটি 32-বিট স্বাক্ষরিত পূর্ণসংখ্যাও হতে পারে যদি
_FILE_OFFSET_BITS ম্যাক্রোর মান আছে 64। সংক্ষেপে, ইউনিক্সের মধ্যে সবকিছু নমনীয়,
এবং পরিচালিত কোড এই ধরনের নমনীয়তার সাথে মোকাবিলা করতে পারে না।
এইভাবে, জন্য কুলুঙ্গি তৈরি-নেটিভ-মানচিত্র : একটি নির্দিষ্ট ABI অনুমান করুন যা পরিচালিত কোড লক্ষ্য করতে পারে,
এবং সংশ্লিষ্ট নেটিভের কাছে পরিচালিত উপস্থাপনাগুলিকে "থাঙ্ক" করার জন্য কোড তৈরি করুন
উপস্থাপনা এই জন্য করা প্রয়োজন সব যে প্ল্যাটফর্ম এবং মধ্যে পরিবর্তিত হতে পারে
কম্পাইলার পতাকা, গণনা মান থেকে ( সিগবুস FreeBSD-এ এর মান 10 আছে কিন্তু 7 অন
লিনাক্স) সদস্যদের গঠন করতে (কত বড় বন্ধ_টি ?)।
তৈরি-নেটিভ-মানচিত্র পরিদর্শন করবে সমাবেশ-ফাইল-নাম এবং নিম্নলিখিত ফাইলগুলি আউটপুট করুন:
OUTPUT-PREFIX.h
গণনার মান, শ্রেণী এবং কাঠামোর ঘোষণা, প্রতিনিধি রয়েছে
ঘোষণা, এবং [Dllআমদানি] - চিহ্নিত পদ্ধতি ( দ্বারা নির্দিষ্ট লাইব্রেরি থেকে
--লাইব্রেরি ) সমাবেশের মধ্যে সমাবেশ-ফাইল-নাম .
OUTPUT-PREFIX.c
গণনা এবং কাঠামো রূপান্তর বাস্তবায়ন ধারণ করে
ফাংশন।
OUTPUT-PREFIX.cs
একটি আংশিক শ্রেণী রয়েছে নেটিভ কনভার্ট গণনা অনুবাদ ধারণকারী
পদ্ধতি।
OUTPUT-PREFIX.xml
গণনা অনুবাদের জন্য ECMA XML ডকুমেন্টেশন স্টাব তৈরি করে
মধ্যে পদ্ধতি OUTPUT-PREFIX.cs .
তৈরি-নেটিভ-মানচিত্র প্রাথমিকভাবে সন্ধান করে MapAttribute -সজ্জিত প্রকার, এবং দুটি ব্যবহার করে
MapAttribute বৈশিষ্ট্য:
নেটিভ টাইপ
সংশ্লিষ্ট সি টাইপ ধারণ করে। শুধুমাত্র ক্লাসে প্রয়োগ করলেই উপযোগী,
কাঠামো, এবং ক্ষেত্র।
পতাকা দমন করুন
একটি গণনা সদস্যের উপর নির্দিষ্ট করা হলে [পতাকা] -সজ্জিত গণনা
টাইপ করুন, অক্ষম বিট-মাস্কিং গণনার জন্য সাধারণ কোড জেনারেটর সমর্থন
ধরনের।
বিটমাস্ক এবং নন-বিটমাস্ক তথ্য যখন এর মধ্যে সংরক্ষণ করা হয় তখন এটি কার্যকর
একই ধরনের, এবং বিটমাস্ক চেকিং নন-বিটমাস্কের জন্য ব্যবহার করা উচিত নয়
মান উদাহরণ: Mono.Unix.Native.FilePermissions.S_IFREG , যা একটি নয়
বিটমাস্ক মান, যখন অধিকাংশ ফাইল পারমিশন বিটমাস্ক মান নিয়ে গঠিত (
ফাইল পারমিশন।S_IRUSR , ফাইল পারমিশন।S_IWUSR , ইত্যাদি)।
সার্জারির MapAttribute বৈশিষ্ট্য ক্লাস, কাঠামো, প্রতিনিধি, ক্ষেত্র এবং নির্দিষ্ট করা যেতে পারে
গণনা
প্রতিনিধিদের
প্রতিনিধিদের জন্য কোড জেনারেশন উপেক্ষা করে MapAttribute.NativeType সম্পত্তি, এবং
একটি ফাংশন পয়েন্টার তৈরি করে টাইপডেফ যেটি প্রতিনিধি ঘোষণার সাথে সবচেয়ে ভালো মেলে
মধ্যে .h ফাইল.
উদাহরণ স্বরূপ,
নামস্থান Foo {
[মানচিত্র]
প্রতিনিধি স্ট্রিং MyCallback (স্ট্রিং গুলি);
}
উৎপন্ন করে টাইপডেফ :
typedef char* (*Foo_MyCallback) (const char *s);
ক্লাস এবং স্ট্রাকচার
A [মানচিত্র] -সজ্জিত শ্রেণী বা কাঠামোর মধ্যে একটি সি কাঠামো ঘোষণা পাবেন
.h ফাইল:
[মানচিত্র]
struct Foo {
পাবলিক int i;
}
হয়ে
struct Foo {
পাবলিক int i;
};
যদি MapAttribute.NativeType সম্পত্তি সেট করা হয়, তারপর রূপান্তর ফাংশন হবে
মধ্যে ঘোষিত .h ফাইল এবং এর মধ্যে তৈরি .c ফাইল:
নামস্থান Foo {
[মানচিত্র ("স্ট্রাকট স্ট্যাট")]
struct স্ট্যাট {
পাবলিক uint st_uid;
}
}
হয়ে
/* .h ফাইল */
struct Foo_Stat {
স্বাক্ষরবিহীন int st_uid;
};
কোন int
Foo_FromStat (struct Foo_Stat *from, struct stat * থেকে);
কোন int
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to);
/* .c ফাইল */
কোন int
Foo_FromStat (struct Foo_Stat *from, struct stat * থেকে)
{
memset (to, 0, sizeof(*to);
থেকে->st_uid = থেকে->st_uid;
ফিরে 0;
}
কোন int
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to)
{
memset (to, 0, sizeof(*to);
থেকে->st_uid = থেকে->st_uid;
ফিরে 0;
}
ক্লাসের জন্য, রূপান্তর ফাংশন শুধুমাত্র ক্লাসে ঘোষিত ক্ষেত্রগুলি কপি করবে
নিজেই অভিভাবক ক্লাসে ঘোষিত ক্ষেত্রগুলি অনুলিপি করা হবে না। (এই কারণ
তৈরি-নেটিভ-মানচিত্র কিভাবে উত্তরাধিকার সি বাস্তবায়িত হয় জানি না. তাই
অভিভাবক ক্লাস থেকে ক্ষেত্র অনুলিপি রূপান্তর কলার ছেড়ে দেওয়া হয়
ফাংশন।)
ক্ষেত্রগুলি যদি একটি ক্ষেত্র (1) থাকে MapAttribute বৈশিষ্ট্য, এবং (2) আছে
MapAttribute.NativeType প্রপার্টি সেট, তারপর নির্দিষ্ট নেটিভ টাইপ ব্যবহার করা হবে
ওভারফ্লো চেক করার জন্য। উদাহরণ স্বরূপ:
নামস্থান Foo {
[মানচিত্র ("স্ট্রাকট স্ট্যাট")]
struct স্ট্যাট {
[মানচিত্র ("off_t")] সর্বজনীন দীর্ঘ st_size;
}
}
উত্পন্ন
/* .h ফাইল */
struct Foo_Stat {
gint64 st_size;
};
কোন int
Foo_FromStat (struct Foo_Stat *from, struct stat * থেকে);
কোন int
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to);
/* .c ফাইল */
কোন int
Foo_FromStat (struct Foo_Stat *from, struct stat * থেকে)
{
_cnm_return_val_if_overflow (off_t, from->st_size, -1);
memset (to, 0, sizeof(*to);
to->st_size = থেকে->st_size;
ফিরে 0;
}
কোন int
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to)
{
_cnm_return_val_if_overflow (gint64, from->st_size, -1);
memset (to, 0, sizeof(*to);
to->st_size = থেকে->st_size;
ফিরে 0;
}
এটি রূপান্তর ফাংশনের মধ্যে আরও ভাল ত্রুটি পরীক্ষা করার জন্য দরকারী।
MapAttribute.NativeType এটির জন্য প্রয়োজন কারণ এটি জানার অন্য কোন উপায় নেই
নেটিভ টাইপ হল (সিস্টেম হেডার ফাইল পার্স না করে...)।
গণনা
প্রতিটি সদস্যের জন্য একটি C গণনা এবং ম্যাক্রো তৈরি করে
গণনা থেকে এবং থেকে ফাংশন এছাড়াও ঘোষণা করা হয় .h ফাইল এবং
তে বাস্তবায়িত হয় .c ফাইল.
উদাহরণ স্বরূপ,
নামস্থান Foo {
[মানচিত্র]
enum Ernno {
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 from, int *to);
এবং নিম্নলিখিত উৎপন্ন করে .c ফাইল:
কোন int
Foo_FromErrno (int থেকে, int * থেকে)
{
* থেকে = 0;
যদি (== Foo_Errno_EPERM থেকে)
#ifdef EINVAL
{* থেকে = EINVAL;}
# আরও
{errno = EINVAL; রিটার্ন -1;}
#endif
ফিরে 0;
}
কোন int
Foo_ToErrno (int from, int *to)
{
* থেকে = 0;
#ifdef EINVAL
যদি (== EINVAL থেকে)
{*to = Foo_Errno_EPERM; রিটার্ন 0;}
#endif
রিটার্ন -1;
}
পরিচালিত enum হলে বিভিন্ন কোড তৈরি হবে [পতাকা] -সজ্জিত
গণনা (বিটওয়াইজ পতাকাগুলির জন্য অ্যাকাউন্টে), কিন্তু এটি মৌলিক ধারণা।
মেলিং তালিকাসমূহ
দেখুন http://lists.ximian.com/mailman/listinfo/mono-devel-list বিস্তারিত জানার জন্য.
ওয়েব SITE এর
দেখুন http://www.mono-project.com বিস্তারিত জানার জন্য
তৈরি-নেটিভ-মানচিত্র(1)
onworks.net পরিষেবা ব্যবহার করে তৈরি-নেটিভ-ম্যাপ অনলাইন ব্যবহার করুন