EnglischFranzösischSpanisch

Ad


OnWorks-Favicon

create-native-map - Online in der Cloud

Führen Sie create-native-map im kostenlosen OnWorks-Hosting-Provider über Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator aus

Dies ist der Befehl create-native-map, der im kostenlosen OnWorks-Hosting-Provider über eine unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


create-native-map - C/C#-Mapping-Ersteller

ZUSAMMENFASSUNG


Native-Karte erstellen [OPTIONEN]* MONTAGE-DATEI-NAME AUSGANG-PRÄFIX

OPTIONAL


--autoconf-header=KOPF
HEADER ist ein Header-Dateiname in der Syntax, die typischerweise mit C . verwendet wird #einschließen
Aussage, zB #einschließen or #einschließen "lokal.h" .

Aus dem Include-Namen wird ein Autoconf-formatiertes Makro generiert und a #einschließen
Direktive ist in a . eingeschlossen #ifdef Block für das Autoconf-Makro innerhalb der
erzeugt .c Datei.

Zum Beispiel, --autoconf-header= würde den Code generieren:

#ifndef HAVE_STDIO_H
#einschließen
#endif /* ndef HAVE_STDIO_H */

--autoconf-member=MITGLIED
Geben Sie an, dass jeder Zugriff auf MEMBER sollte in a gewickelt werden #ifdef HABE_MITGLIED
blockieren. MEMBER kann entweder a Feldname oder eine Klassenname . Feldname
Kombination.

Beispiel für die C#-Deklaration:

[Mono.Unix.Native.Map ("struct dirent")]
struct dirent {
öffentlicher langer d_off;
}

dann --autoconf-member=d_off würde den Code ähnlich wie folgt generieren:

int
ToDirent (struct dirent *from, struct dirent *to)
{
#ifdef HAVE_STRUCT_DIRENT_D_OFF
nach->d_off = von->d_off;
#endif /* ndef HAVE_STRUCT_DIRENT_D_OFF */
}

--exclude-native-symbol=SYMBOL
SYMBOL ist eine [DllImport] -markierte Methode, die sollte nicht einen Prototyp erstellen lassen
für sie.

--impl-header=KOPF
Einfügen #einschließen Anweisung innerhalb der generierten .c Datei für HEADER .

Zum Beispiel, --impl-header= erzeugt

#einschließen

--impl-macro=MAKRO
Einfügen #define Anweisung innerhalb der generierten .c Datei. MAKRO kann a . enthalten = zu
Trennen Sie den Makronamen vom Makrowert.

Zum Beispiel, --impl-macro=FOO=42 erzeugt

#define FOO 42

--library=BIBLIOTHEK
Prototypen erstellen für [DllImport] -markierte Methoden, die auf das native referenzieren
Bibliothek BIBLIOTHEK in das generierte .h Datei.

--public-header=KOPF
Einfügen #einschließen Anweisung innerhalb der generierten .h Datei für HEADER .

Zum Beispiel, --public-header= erzeugt

#einschließen

--public-macro=MAKRO
Einfügen #define Anweisung innerhalb der generierten .h Datei. MAKRO kann a . enthalten = zu
Trennen Sie den Makronamen vom Makrowert.

Zum Beispiel, --public-macro=FOO=42 erzeugt

#define FOO 42

--rename-member=FROM=TO
Dies wird verwendet, wenn AB ist ein C-Makro und muss daher geändert werden, um verwendet zu werden
vernünftig. Alle generierten Verweise auf die verwaltete Darstellung verwenden TO beantragen müssen
of AB .

Beispiel für die C#-Deklaration:

[Mono.Unix.Native.Map ("struct stat")]
Strukturstatistik {
öffentliche lange st_atime;
}

und die Argumentation --rename-member=st_atime=st_atime_ , das erzeugte .h Datei würde
enthalten:

Strukturstatistik {
gint64 st_atime_;
};

(beachten Sie den geänderten Feldnamen), während das generierte .c Datei würde enthalten:

ToStat (struct stat *von, struct Stat *bis)
{
nach->st_atime_ = von->st_atime;
}

--rename-namespace=FROM=TO
Standardmäßig ist der C-"Namespace" (Symbolpräfix) der C#-Namespace; Typen innerhalb der
C#-Namespace Mono.Unix.Native wäre im C "Namespace" Mono_Unix_Native . Benutzen
--rename-namespace um die Vorgabe zu ändern, zB --umbenennen-
namespace=Mono.Unix.Native=Mono_Posix .

BESCHREIBUNG


Native-Karte erstellen ist ein Programm für ein bestimmtes Szenario: Code halten, der eng ist
zwischen C und C# synchron miteinander gekoppelt, basierend auf den C#-Typen.

Platform Invoke ist nur sinnvoll, wenn der verwaltete Code die genauen Typen und das Layout aller kennt
nicht verwaltete Strukturen, die es verwendet. Dies ist normalerweise unter Windows der Fall, aber es ist nicht der Fall
auf Unix. Zum Beispiel, struct Zustand verwendet Typen mit Größen, die von
Plattform zu Plattform (oder sogar basierend auf den definierten Compiler-Makros!). Zum Beispiel, aus_t
ist auf ILP32-Plattformen normalerweise eine 32-Bit-Ganzzahl mit Vorzeichen, kann jedoch eine 64-Bit-Ganzzahl mit Vorzeichen sein
auf LP64-Plattformen, kann aber auf ILP64-Plattformen auch eine 32-Bit-Ganzzahl mit Vorzeichen sein, wenn die
_FILE_OFFSET_BITS Makro hat den Wert 64. Kurz gesagt, innerhalb von Unix ist alles flexibel,
und verwalteter Code kann mit dieser Flexibilität nicht umgehen.

Somit ist die Nische für Native-Karte erstellen : Nehmen Sie eine feste ABI an, auf die verwalteter Code abzielen kann,
und generieren Sie Code, um die verwalteten Darstellungen an die entsprechenden nativen zu "thunken".
Darstellungen. Dies muss getan werden für alles das kann je nach Plattform variieren und
Compiler-Flags, aus Aufzählungswerten ( SIGBUS hat den Wert 10 auf FreeBSD aber 7 auf
Linux), um Mitglieder zu strukturieren (wie groß ist) aus_t ?).

Native-Karte erstellen wird inspizieren MONTAGE-DATEI-NAME und geben Sie die folgenden Dateien aus:

AUSGANGS-PRÄFIX.h
Enthält Aufzählungswerte, Klassen- und Strukturdeklarationen, Delegate
Erklärungen und [DllImport] -markierte Methoden (aus der Bibliothek angegeben durch
--Bücherei ) innerhalb der Baugruppe MONTAGE-DATEI-NAME .

AUSGANG-PRÄFIX.c
Enthält die Implementierung der Aufzählung und Strukturkonvertierung
Funktionen.

AUSGABE-PRÄFIX.cs
Enthält eine Teilklasse NativeKonvertieren enthaltende Aufzählungsübersetzung
Methoden.

AUSGABE-PRÄFIX.xml
Generiert ECMA XML-Dokumentations-Stubs für die Aufzählungsübersetzung
Methoden in AUSGABE-PRÄFIX.cs .

Native-Karte erstellen sucht in erster Linie nach Kartenattribute -dekorierte Typen und verwendet zwei
Kartenattribute Eigenschaften:

Nativer Typ
Enthält den entsprechenden C-Typ. Nur sinnvoll, wenn auf Klassen angewendet,
Strukturen und Felder.

Flaggen unterdrücken
Bei Angabe für einen Enumerationsmember von a [Flaggen] -dekorierte Aufzählung
Art, deaktiviert die normale Codegeneratorunterstützung für die Bitmaskierungsaufzählung
Typen.

Dies ist nützlich, wenn Bitmasken- und Nicht-Bitmasken-Informationen innerhalb der
derselbe Typ und die Bitmaskenprüfung sollte nicht für die Nicht-Bitmaske verwendet werden
Werte. Beispiel: Mono.Unix.Native.FilePermissions.S_IFREG , das ist kein
Bitmaskenwert, während die meisten von Dateiberechtigungen besteht aus Bitmaskenwerten (
FilePermissions.S_IRUSR , FilePermissions.S_IWUSR , Etc.).

Das Kartenattribute Attribut kann für Klassen, Strukturen, Delegaten, Felder usw. angegeben werden
Aufzählungen.

Delegierte
Die Codegenerierung für Delegaten ignoriert die MapAttribute.NativeType Eigentum und
erzeugt einen Funktionszeiger typedef das passt am besten zur Delegiertenerklärung
in die .h Datei.

Zum Beispiel,

Namensraum Foo {
[Karte]
Delegate-String MyCallback (String s);
}

erzeugt die typedef :

typedef char* (*Foo_MyCallback) (const char *s);

Klassen und Strukturen
A [Karte] -dekorierte Klasse oder Struktur erhält eine C-Strukturdeklaration innerhalb der
.h Datei:

[Karte]
struct Foo {
öffentliche int i;
}

wird

struct Foo {
öffentliche int i;
};

Besitzt das MapAttribute.NativeType Eigenschaft gesetzt ist, dann werden die Umrechnungsfunktionen
innerhalb der . deklariert .h Datei und erstellt innerhalb der .c Datei:

Namensraum Foo {
[Karte ("struct stat")]
Strukturstatistik {
öffentliche uint st_uid;
}
}

wird

/* Die .h-Datei */
struct Foo_Stat {
unsigned int st_uid;
};
int
Foo_FromStat (struct Foo_Stat *von, struct stat *bis);
int
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to);

/* Die .c-Datei */
int
Foo_FromStat (struct Foo_Stat *von, struct stat *bis)
{
memset (bis, 0, sizeof(*bis);
to->st_uid = von->st_uid;
Rückkehr 0;
}

int
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to)
{
memset (bis, 0, sizeof(*bis);
to->st_uid = von->st_uid;
Rückkehr 0;
}

Bei Klassen kopieren die Konvertierungsfunktionen nur Felder, die in der Klasse deklariert sind
selbst. In Elternklassen deklarierte Felder werden nicht kopiert. (Das ist weil
Native-Karte erstellen weiß nicht, wie die Vererbung in C implementiert ist. Deshalb
Das Kopieren von Feldern aus übergeordneten Klassen bleibt dem Aufrufer der Konvertierung überlassen
Funktionen.)

Felder Wenn ein Feld (1) das Kartenattribute Attribut, und (2) hat die
MapAttribute.NativeType Eigenschaftssatz, dann wird der angegebene native Typ verwendet
zur Überlaufkontrolle. Zum Beispiel:

Namensraum Foo {
[Karte ("struct stat")]
Strukturstatistik {
[Map ("off_t")] public long st_size;
}
}

erzeugt

/* Die .h-Datei */
struct Foo_Stat {
gint64 st_größe;
};
int
Foo_FromStat (struct Foo_Stat *von, struct stat *bis);
int
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to);

/* Die .c-Datei */
int
Foo_FromStat (struct Foo_Stat *von, struct stat *bis)
{
_cnm_return_val_if_overflow (off_t, from->st_size, -1);

memset (bis, 0, sizeof(*bis);
to->st_size = from->st_size;
Rückkehr 0;
}

int
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to)
{
_cnm_return_val_if_overflow (gint64, from->st_size, -1);

memset (bis, 0, sizeof(*bis);
to->st_size = from->st_size;
Rückkehr 0;
}

Dies ist nützlich für eine bessere Fehlerprüfung innerhalb der Konvertierungsfunktionen.
MapAttribute.NativeType ist dafür erforderlich, da es keine andere Möglichkeit gibt, zu wissen, was
der native Typ ist (ohne die Systemheaderdateien zu analysieren...).

Aufzählungen
Generiert eine C-Enumeration und Makros für jedes der Member innerhalb der
Aufzählung. Zu und Aus Funktionen werden auch in der deklariert .h Datei-und
umgesetzt in der .c Datei.

Zum Beispiel,

Namensraum Foo {
[Karte]
enum Errno {
EINVAL
}
}

würde folgendes im erzeugen .h Datei:

enum Foo_Errno {
Foo_Errno_EINVAL = 0,
#define Foo_Errno_EINVAL Foo_Errno_EINVAL
};
int Foo_FromErrno (int von, int *bis);
int Foo_ToErrno (int von, int *bis);

und erzeugt Folgendes in der .c Datei:

int
Foo_FromErrno (int von, int *bis)
{
*bis = 0;
if (von == Foo_Errno_EPERM)
#ifdef EINVAL
{*bis = EINVAL;}
#else
{Fehlernummer = EINVAL; zurück -1;}
#endif
Rückkehr 0;
}

int
Foo_ToErrno (int von, int *bis)
{
*bis = 0;
#ifdef EINVAL
if (von == EINVAL)
{*to = Foo_Errno_EPERM; 0 zurückgeben;}
#endif
Rückgabe -1;
}

Wenn die verwaltete Enumeration a . ist, wird ein anderer Code generiert [Flaggen] -dekoriert
Aufzählung (um bitweise Flags zu berücksichtigen), aber das ist die Grundidee.

POST Listen


Besuchen Sie http://lists.ximian.com/mailman/listinfo/mono-devel-list für weitere Einzelheiten.

WEB WEBSITE


Besuchen Sie http://www.mono-project.com für Details

Native-Karte erstellen(1)

Verwenden Sie create-native-map online mit den onworks.net-Diensten


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

  • 1
    SCHLUCK
    SCHLUCK
    SWIG ist ein Softwareentwicklungstool
    das verbindet in C geschriebene Programme und
    C++ mit einer Vielzahl von High-Level
    Programmiersprachen. SWIG wird mit verwendet
    anders...
    SWIG herunterladen
  • 2
    WooCommerce Nextjs Reaktionsthema
    WooCommerce Nextjs Reaktionsthema
    Reagieren Sie mit dem WooCommerce-Theme, das mit erstellt wurde
    Als nächstes JS, Webpack, Babel, Node und
    Express mit GraphQL und Apollo
    Klient. WooCommerce-Shop in React(
    enthält: Produkte...
    Laden Sie WooCommerce Nextjs React Theme herunter
  • 3
    archlabs_repo
    archlabs_repo
    Paket-Repo für ArchLabs Dies ist eine
    Anwendung, die auch abgerufen werden kann
    für
    https://sourceforge.net/projects/archlabs-repo/.
    Es wurde in OnWorks gehostet in...
    Laden Sie archlabs_repo herunter
  • 4
    Zephyr-Projekt
    Zephyr-Projekt
    Das Zephyr Project ist eine neue Generation
    Echtzeitbetriebssystem (RTOS), das
    unterstützt mehrere Hardware
    Architekturen. Es basiert auf einer
    Kernel mit kleinem Fußabdruck ...
    Laden Sie das Zephyr-Projekt herunter
  • 5
    SCons
    SCons
    SCons ist ein Software-Konstruktionstool
    das ist eine überlegene Alternative zum
    klassisches "Make"-Build-Tool, das
    wir alle kennen und lieben. SCons ist
    implementiert ein...
    Laden Sie SCons herunter
  • 6
    PSInt
    PSInt
    PSeInt ist ein Pseudocode-Interpreter für
    spanischsprachige Programmierstudenten.
    Sein Hauptzweck ist es, ein Werkzeug für
    Grundlegendes lernen und verstehen
    Konzept...
    PSeInt herunterladen
  • Mehr »

Linux-Befehle

Ad