Bu, OnWorks ücretsiz barındırma sağlayıcısında Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak çalıştırılabilen yerel harita oluştur komutudur.
Program:
ADI
yerel harita oluştur - C/C# Eşleme Oluşturucu
SİNOPSİS
yerel-harita oluştur [SEÇENEKLER]* MONTAJ-DOSYA-NAME ÇIKIŞ-ÖNEK
SEÇENEKLER
--autoconf-header=BAŞLIK
ÜSTBİLGİ tipik olarak C ile kullanılan sözdizimindeki bir başlık dosyası adıdır. #Dahil etmek
beyan, örn. #Dahil etmek or #Dahil etmek "yerel.h" .
Dahil etme adından Otomatik Konf biçimli bir makro oluşturulur ve #Dahil etmek
direktif bir içine sarılır #ifdef içindeki Autoconf makrosu için blok
oluşturulan .c dosyası.
Örneğin, --autoconf-başlık= kodu oluşturur:
#ifndef HAVE_STDIO_H
#Dahil etmek
#endif /* def HAVE_STDIO_H */
--autoconf-üye=ÜYE
herhangi bir erişim olduğunu belirtin ÜYE içine sarılmalıdır #ifdef HAVE_MEMBER
engellemek. ÜYE ya bir olabilir alan adı ya da sınıf adı . alan adı
kombinasyon.
Örneğin, verilen C# bildirimi:
[Mono.Unix.Native.Map ("yapı dirent")]
yapı Dirent {
genel uzun d_off;
}
sonra --autoconf-üye=d_off şuna benzer bir kod üretecektir:
int
ToDirent (yapı dirent *den, Dirent *to yapı)
{
#ifdef HAVE_STRUCT_DIRENT_D_OFF
to->d_off = from->d_off;
#endif /* def HAVE_STRUCT_DIRENT_D_OFF */
}
--exclude-native-symbol=SEMBOL
SİMGE bir [DllImport] -işaretli yöntem değil üretilen bir prototip var
bunun için.
--impl-header=BAŞLIK
Ekle #Dahil etmek oluşturulan içindeki ifade .c Dosya için ÜSTBİLGİ .
Örneğin, --impl-başlık= üretir
#Dahil etmek
--impl-makro=MAKRO
Ekle #tanımlamak oluşturulan içindeki ifade .c dosyası. MAKRO içerebilir = için
makro adını makro değerinden ayırın.
Örneğin, --impl-makro=FOO=42 üretir
#FOO 42'yi tanımla
--kütüphane=KÜTÜPHANE
için prototipler oluşturun [DllImport] - yerele referans veren işaretli yöntemler
kütüphane KÜTÜPHANE oluşturulan içine .h dosyası.
--public-header=BAŞLIK
Ekle #Dahil etmek oluşturulan içindeki ifade .h Dosya için ÜSTBİLGİ .
Örneğin, --public-header= üretir
#Dahil etmek
--public-makro=MAKRO
Ekle #tanımlamak oluşturulan içindeki ifade .h dosyası. MAKRO içerebilir = için
makro adını makro değerinden ayırın.
Örneğin, --public-makro=FOO=42 üretir
#FOO 42'yi tanımla
--rename-member=GELİŞEN=KİME
Bu ne zaman kullanılır DAN bir C makrosudur ve bu nedenle kullanılabilmesi için değiştirilmelidir
aklı başında. Yönetilen temsile yönelik oluşturulan tüm referanslar şunları kullanır: TO yerine
of DAN .
Örneğin, verilen C# bildirimi:
[Mono.Unix.Native.Map ("yapı durumu")]
yapı Stat {
herkese açık uzun st_atime;
}
ve argüman --rename-member=st_atime=st_atime_ , oluşturulan .h dosya
şunları içerir:
yapı Stat {
gint64 st_atime_;
};
(değiştirilen alan adını not edin), oluşturulurken .c dosya şunları içerecektir:
ToStat (struct stat *den, struct Stat *to)
{
to->st_atime_ = from->st_atime;
}
--rename-namespace=KENDİ=KİME
Varsayılan olarak, C "ad alanı" (sembol öneki), C# ad alanıdır; içindeki türler
C# ad alanı Mono.Unix.Yerel C "ad alanında" olurdu Mono_Unix_Native . Kullanmak
--yeniden adlandır-ad alanı varsayılanı değiştirmek için, örneğin --Adını değiştirmek-
ad alanı=Mono.Unix.Native=Mono_Posix .
TANIM
yerel-harita oluştur belirli bir senaryo için bir programdır: sıkı bir şekilde kod tutmak
C# türlerine dayalı olarak birbirleriyle senkronize olarak C ve C# arasında birleştirilir.
Platform Invoke, yalnızca yönetilen kod, tüm öğelerin türlerini ve düzenini tam olarak biliyorsa yararlıdır.
kullandığı yönetilmeyen yapılardır. Bu genellikle Windows'ta geçerlidir, ancak değil durumda
Unix'te. Örneğin, yapı stat arasında değişen boyutlarda türler kullanır.
platformdan platforma (hatta tanımlanan derleyici makrolarına göre!). Örneğin, kapalı
genellikle ILP32 platformlarında işaretli bir 32 bit tam sayıdır, ancak işaretli bir 64 bit tam sayı olabilir
LP64 platformlarında, ancak ILP64 platformlarında 32 bit işaretli bir tamsayı da olabilir.
_FILE_OFFSET_BITS makro 64 değerine sahiptir. Kısacası, Unix'te her şey esnektir,
ve yönetilen kod böyle bir esneklikle baş edemez.
Böylece, niş için yerel-harita oluştur : yönetilen kodun hedefleyebileceği sabit bir ABI varsayın,
ve yönetilen temsilleri ilgili yerele "parçalamak" için kod oluşturun
temsiller. Bunun için yapılması gerekiyor her şey platformlar arasında değişebilir ve
numaralandırma değerlerinden derleyici bayrakları ( SIGBUS FreeBSD'de 10 değerine sahiptir, ancak 7'de
Linux) üyeleri yapılandırmak için (ne kadar büyük kapalı ?).
yerel-harita oluştur inceleyecek MONTAJ-DOSYA-ADI ve aşağıdaki dosyaların çıktısını alın:
ÇIKTI-ÖNEK.h
Numaralandırma değerleri, sınıf ve yapı bildirimleri, temsilci içerir
beyannameler ve [DllImport] -işaretli yöntemler (belirtilen kitaplıktan
--kütüphane ) meclis içinde MONTAJ-DOSYA-ADI .
ÇIKTI-ÖNEK.c
Numaralandırma ve yapı dönüştürmenin uygulanmasını içerir
fonksiyonlar.
ÇIKTI-ÖNEK.cs
Kısmi bir sınıf içerir YerelDönüştürme numaralandırma çevirisi içeren
yöntemleri.
ÇIKTI-ÖNEK.xml
Numaralandırma çevirisi için ECMA XML belge taslakları oluşturur
yöntemler ÇIKTI-ÖNEK.cs .
yerel-harita oluştur öncelikle arar Harita Özelliği -dekorasyonlu tipler ve iki kullanır
Harita Özelliği özellikleri:
YerelTür
İlgili C tipini içerir. Yalnızca sınıflara uygulandığında yararlıdır,
yapılar ve alanlar.
BastırBayraklar
Bir numaralandırma üyesinde belirtildiğinde [Bayraklar] - dekore edilmiş numaralandırma
tip, devre dışı bırakır bit maskeleme numaralandırması için normal kod üreteci desteği
türleri.
Bu, bit maskesi ve bit maskesi olmayan bilgiler içinde depolandığında yararlıdır.
aynı tür ve bit maskesi denetimi bit maskesi olmayanlar için kullanılmamalıdır
değerler. Örnek: Mono.Unix.Native.FilePermissions.S_IFREG , hangisi değil
bit maskesi değeri, çoğu Dosya İzinleri bit maskesi değerlerinden oluşur (
FilePermissions.S_IRUSR , FilePermissions.S_IWUSR , Vb.)
The Harita Özelliği nitelik, sınıflar, yapılar, temsilciler, alanlar ve
numaralandırmalar.
Delegeler
Temsilciler için kod oluşturma, MapAttribute.NativeType mülkiyet ve
bir işlev işaretçisi oluşturur typedef temsilci beyanıyla en iyi eşleşen
içine .h dosyası.
Örneğin,
ad alanı Foo {
[Harita]
temsilci dizgisi MyCallback (dizeler);
}
üretir typedef :
typedef char* (*Foo_MyCallback) (const char *s);
Sınıflar ve Yapılar
A [Harita] -dekore edilmiş sınıf veya yapı, içinde bir C yapısı bildirimi alacaktır.
.h Dosya:
[Harita]
yapı Foo {
genel int;
}
olur
yapı Foo {
genel int;
};
Eğer MapAttribute.NativeType özellik ayarlanır, ardından dönüştürme işlevleri
içinde ilan edildi .h dosya ve içinde oluşturulan .c Dosya:
ad alanı Foo {
[Harita ("yapı durumu")]
yapı Stat {
public uint st_uid;
}
}
olur
/* .h dosyası */
yapı Foo_Stat {
imzasız int st_uid;
};
int
Foo_FromStat (struct Foo_Stat *dan, struct stat *to);
int
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to);
/* .c dosyası */
int
Foo_FromStat (struct Foo_Stat *den, struct stat *to)
{
memset (-, 0, sizeof(*to);
to->st_uid = from->st_uid;
0 dönmek;
}
int
Foo_ToStat (yapı stat *ila, sxtruct Foo_Stat *ila)
{
memset (-, 0, sizeof(*to);
to->st_uid = from->st_uid;
0 dönmek;
}
Sınıflar için, dönüştürme işlevleri yalnızca sınıfta bildirilen alanları kopyalayacaktır.
kendisi. Üst sınıflarda belirtilen alanlar kopyalanmayacaktır. (Bunun nedeni ise
yerel-harita oluştur kalıtımın C'de nasıl uygulandığını bilmiyor. Bu nedenle
alanları üst sınıflardan kopyalamak, dönüşümü çağırana bırakılır
fonksiyonlar.)
Alanlar Bir alan (1) varsa, Harita Özelliği özniteliği ve (2) vardır
MapAttribute.NativeType özellik kümesi, ardından belirtilen yerel tür kullanılacaktır
taşma kontrolü için. Örneğin:
ad alanı Foo {
[Harita ("yapı durumu")]
yapı Stat {
[Harita ("off_t")] public long st_size;
}
}
üretir
/* .h dosyası */
yapı Foo_Stat {
gint64 st_size;
};
int
Foo_FromStat (struct Foo_Stat *dan, struct stat *to);
int
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to);
/* .c dosyası */
int
Foo_FromStat (struct Foo_Stat *den, struct stat *to)
{
_cnm_return_val_if_overflow (off_t, from->st_size, -1);
memset (-, 0, sizeof(*to);
to->st_size = from->st_size;
0 dönmek;
}
int
Foo_ToStat (yapı stat *ila, sxtruct Foo_Stat *ila)
{
_cnm_return_val_if_overflow (gint64, from->st_size, -1);
memset (-, 0, sizeof(*to);
to->st_size = from->st_size;
0 dönmek;
}
Bu, dönüştürme işlevleri içinde daha iyi hata denetimi için kullanışlıdır.
MapAttribute.NativeType bunun için gereklidir, çünkü ne olduğunu bilmenin başka bir yolu yoktur.
yerel tür (sistem başlık dosyalarını ayrıştırmadan...).
numaralandırma
içindeki üyelerin her biri için bir C numaralandırması ve makrolar oluşturur.
numaralandırma. için ve Konum işlevler de bildirilir .h dosya ve
içinde uygulanan .c dosyası.
Örneğin,
ad alanı Foo {
[Harita]
numaralandırma Errno {
EİNVAL
}
}
aşağıdakileri üretecektir .h Dosya:
numaralandırma Foo_Errno {
Foo_Errno_EINVAL = 0,
#define Foo_Errno_EINVAL Foo_Errno_EINVAL
};
int Foo_FromErrno (int'den, int *'e);
int Foo_ToErrno (int'den, int *'e);
ve aşağıdakileri üretir .c Dosya:
int
Foo_FromErrno (int kaynağından, int *to)
{
*ila = 0;
if (== Foo_Errno_EPERM'den)
#ifdef EINVAL
{*to = EINVAL;}
#else
{errno = EINVAL; dönüş -1;}
#endif
0 dönmek;
}
int
Foo_ToErrno (int'den, int *'e)
{
*ila = 0;
#ifdef EINVAL
if (== EINVAL'den)
{*to = Foo_Errno_EPERM; 0 döndür;}
#endif
dönüş -1;
}
Yönetilen numaralandırma bir ise, farklı kod üretilecektir. [Bayraklar] -dekore edilmiş
numaralandırma (bit düzeyinde bayrakları hesaba katmak için), ancak temel fikir budur.
POSTA LİSTELERİ
Türkiye Dental Sosyal Medya Hesaplarından bizi takip edebilirsiniz. http://lists.ximian.com/mailman/listinfo/mono-devel-list Ayrıntılar için.
WEB SİTE
Türkiye Dental Sosyal Medya Hesaplarından bizi takip edebilirsiniz. http://www.mono-project.com detaylar için
yerel-harita oluştur(1)
onworks.net hizmetlerini kullanarak yerel harita oluşturmayı çevrimiçi kullanın