英語フランス語スペイン語

Ad


OnWorksファビコン

create-native-map - クラウドでオンライン

Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターを介して、OnWorks の無料ホスティング プロバイダーで create-native-map を実行します。

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなど、複数の無料オンライン ワークステーションのいずれかを使用して、OnWorks 無料ホスティング プロバイダーで実行できる create-native-map コマンドです。

プログラム:

NAME


create-native-map - C/C# マッピング作成者

SYNOPSIS


ネイティブ マップの作成 [オプション]* アセンブリ ファイル名 出力プレフィックス

OPTIONS


--autoconf-header=ヘッダー
ヘッダ C で通常使用される構文のヘッダー ファイル名です。 #include
ステートメント、例えば #include or #include 「local.h」 .

インクルード名から Autoconf 形式のマクロが生成され、 #include
ディレクティブは #ifdef 内の Autoconf マクロのブロック
生成された .c ファイルにソフトウェアを指定する必要があります。

たとえば、 --autoconf-header= コードを生成します:

#ifndef HAVE_STDIO_H
#include
#endif /* ndef HAVE_STDIO_H */

--autoconf-member=メンバー
へのアクセスを指定します。 メンバー 内にラップする必要があります #ifdef HAVE_MEMBER
ブロック。 メンバー どちらかになります フィールド名 または クラス名 . フィールド名
組み合わせ。

たとえば、次の C# 宣言があるとします。

[Mono.Unix.Native.Map ("struct dirent")]
構造体ディレント{
パブリック ロング d_off;
}

その後 --autoconf-member=d_off 次のようなコードが生成されます。

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

--exclude-native-symbol=SYMBOL
SYMBOL   [Dllインポート] -マークされたメソッド プロトタイプを生成する
それのために。

--impl-header=ヘッダー
ブラインドフィルター(掃除用フィルター)をホルダーにはめます。 #include 生成されたステートメント .c ファイル ヘッダ .

たとえば、 --impl-header= 生成

#include

--impl-macro=マクロ
ブラインドフィルター(掃除用フィルター)をホルダーにはめます。 #定義する 生成されたステートメント .c ファイルにソフトウェアを指定する必要があります。 MACRO を含むことができます = 〜へ
マクロ名をマクロ値から分離します。

たとえば、 --impl-macro=FOO=42 生成

#定義 FOO 42

--library=ライブラリ
のプロトタイプを作成する [Dllインポート] -ネイティブを参照するマークされたメソッド
ライブラリ としょうかん 生成されたものに .h ファイルにソフトウェアを指定する必要があります。

--public-header=ヘッダー
ブラインドフィルター(掃除用フィルター)をホルダーにはめます。 #include 生成されたステートメント .h ファイル ヘッダ .

たとえば、 --public-header= 生成

#include

--public-macro=マクロ
ブラインドフィルター(掃除用フィルター)をホルダーにはめます。 #定義する 生成されたステートメント .h ファイルにソフトウェアを指定する必要があります。 MACRO を含むことができます = 〜へ
マクロ名をマクロ値から分離します。

たとえば、 --public-macro=FOO=42 生成

#定義 FOO 42

--rename-member=FROM=TO
これは、次の場合に使用されます。 FROM は C マクロであるため、使用するには変更する必要があります
正気で。 管理表現への生成されたすべての参照は、 を取得する必要がある者
of FROM .

たとえば、次の C# 宣言があるとします。

[Mono.Unix.Native.Map ("struct stat")]
構造体統計 {
公共の長い st_atime;
}

そして議論 --rename-member=st_atime=st_atime_ 、生成された .h ファイルは
含む:

構造体統計 {
gint64 st_atime_;
};

(変更されたフィールド名に注意してください)、生成された .c ファイルには以下が含まれます:

ToStat (struct stat *from, struct Stat *to)
{
to->st_atime_ = from->st_atime;
}

--rename-namespace=FROM=TO
デフォルトでは、C の "名前空間" (シンボル プレフィックス) は C# の名前空間です。 内のタイプ
C# 名前空間 モノ.ユニックス.ネイティブ Cの「名前空間」にあります Mono_Unix_Native 。 使用
--名前の変更-名前空間 デフォルトを変更します。 --改名-
名前空間=Mono.Unix.Native=Mono_Posix .

DESCRIPTION


ネイティブ マップの作成 特定のシナリオのためのプログラムです: コードをしっかりと保持する
C# の型に基づいて、C と C# の間で相互に同期して結合されます。

Platform Invoke は、マネージ コードがすべての正確な型とレイアウトを認識している場合にのみ役立ちます。
使用する管理されていない構造。 これは通常、Windows の場合ですが、 ケース
Unix で。 例えば、 構造 STAT とは異なるサイズの型を使用します。
プラットフォームからプラットフォームへ (または、定義されたコンパイラ マクロに基づいても!)。 例えば、 オフト
通常、ILP32 プラットフォームでは符号付き 32 ビット整数ですが、符号付き 64 ビット整数の場合もあります
LP64 プラットフォームでは、しかし、ILP64 プラットフォームでは、32 ビットの符号付き整数の場合もあります。
_FILE_OFFSET_BITS マクロの値は 64 です。要するに、Unix 内ではすべてが柔軟です。
マネージ コードは、このような柔軟性に対応できません。

したがって、ニッチ ネイティブ マップの作成 : マネージド コードがターゲットにできる固定 ABI を想定し、
マネージド表現を対応するネイティブに「サンク」するコードを生成します
表現。 これは、 すべてのもの プラットフォーム間で異なる可能性があります
列挙値からのコンパイラ フラグ ( シグバス 値は FreeBSD では 10 ですが、FreeBSD では 7 です。
Linux) 構造メンバー (サイズ オフト ?)。

ネイティブ マップの作成 検査します アセンブリ ファイル名 次のファイルを出力します。

出力プレフィックス.h
列挙値、クラスと構造体の宣言、デリゲートが含まれます
宣言、および [Dllインポート] -マークされたメソッド (によって指定されたライブラリから)
- 図書館 ) アセンブリ内 アセンブリ ファイル名 .

出力プレフィックス.c
列挙と構造変換の実装が含まれています
機能します。

出力プレフィックス.cs
部分クラスを含む ネイティブ変換 列挙型翻訳を含む
方法。

出力プレフィックス.xml
列挙変換用の ECMA XML ドキュメント スタブを生成します。
のメソッド 出力プレフィックス.cs .

ネイティブ マップの作成 主に探します マップ属性 ●飾られるタイプで、XNUMX種類を使い分けます
マップ属性 プロパティ:

ネイティブタイプ
対応する C タイプが含まれます。 クラスに適用された場合にのみ有用です。
構造体、およびフィールド。

抑制フラグ
の列挙メンバーで指定された場合 【フラグ】 -装飾された列挙
タイプ、 無効になります ビットマスキング列挙に対する通常のコードジェネレータサポート
タイプ。

これは、ビットマスクおよび非ビットマスク情報が
同じ型であり、ビットマスク チェックは非ビットマスクには使用しないでください。
価値観。 例: Mono.Unix.Native.FilePermissions.S_IFREG ではありません
ビットマスク値、ほとんどの ファイル権限 ビットマスク値 (
FilePermissions.S_IRUSR , FilePermissions.S_IWUSR など)。

  マップ属性 属性は、クラス、構造体、デリゲート、フィールド、および
列挙。

代表者
デリゲートのコード生成では、 MapAttribute.NativeType 財産、そして
関数ポインタを生成します typedef デリゲート宣言に最もよく一致する
.h ファイルにソフトウェアを指定する必要があります。

たとえば、

名前空間 Foo {
[地図]
委任文字列 MyCallback (文字列 s);
}

生成する typedef :

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

クラスと構造
A [地図] 修飾されたクラスまたは構造体は、C 構造体宣言を内部で取得します。
.h ファイル:

[地図]
構造体 Foo {
パブリック int i;
}

になる

構造体 Foo {
パブリック int i;
};

Status MapAttribute.NativeType プロパティが設定されている場合、変換関数は
内で宣言された .h ファイル内で作成され、 .c ファイル:

名前空間 Foo {
[マップ ("struct stat")]
構造体統計 {
パブリック uint st_uid;
}
}

になる

/* .h ファイル */
struct Foo_Stat {
unsigned int st_uid;
};
int型
Foo_FromStat (struct Foo_Stat *from, struct stat *to);
int型
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to);

/* .c ファイル */
int型
Foo_FromStat (struct Foo_Stat *from, struct stat *to)
{
memset (to, 0, sizeof(*to);
to->st_uid = from->st_uid;
0リターン;
}

int型
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to)
{
memset (to, 0, sizeof(*to);
to->st_uid = from->st_uid;
0リターン;
}

クラスの場合、変換関数はクラスで宣言されたフィールドのみをコピーします
自体。 親クラスで宣言されたフィールドはコピーされません。 (それの訳は
ネイティブ マップの作成 継承が C でどのように実装されているかわかりません。
親クラスからのフィールドのコピーは、変換の呼び出し元に任されています
機能。)

フィールド フィールド (1) に マップ属性 属性、および(2)を持っています
MapAttribute.NativeType プロパティが設定されている場合、指定されたネイティブ タイプが使用されます
オーバーフローチェック用。 例えば:

名前空間 Foo {
[マップ ("struct stat")]
構造体統計 {
[マップ ("off_t")] public long st_size;
}
}

生成

/* .h ファイル */
struct Foo_Stat {
gint64 st_size;
};
int型
Foo_FromStat (struct Foo_Stat *from, struct stat *to);
int型
Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to);

/* .c ファイル */
int型
Foo_FromStat (struct Foo_Stat *from, struct stat *to)
{
_cnm_return_val_if_overflow (off_t, from->st_size, -1);

memset (to, 0, sizeof(*to);
to->st_size = from->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 = from->st_size;
0リターン;
}

これは、変換関数内のエラー チェックを改善するのに役立ちます。
MapAttribute.NativeType を知る他の方法がないため、このために必要です。
ネイティブ タイプは (システム ヘッダー ファイルを解析せずに...) です。

列挙
内の各メンバーの C 列挙とマクロを生成します。
列挙。 および 関数も宣言されています .h ファイルと
に実装されています .c ファイルにソフトウェアを指定する必要があります。

たとえば、

名前空間 Foo {
[地図]
enum エラーノ {
アインヴァル
}
}

で以下を生成します .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 from, int *to)
{
*to = 0;
もし (== Foo_Errno_EPERM から)
#ifdef EINVAL
{*to = EINVAL;}
#その他
{errno = EINVAL; -1を返します;}
#endif
0リターン;
}

int型
Foo_ToErrno (int from, int *to)
{
*to = 0;
#ifdef EINVAL
if (== EINVAL から)
{*to = Foo_Errno_EPERM; 0 を返します;}
#endif
-1を返します。
}

マネージ列挙型が 【フラグ】 -装飾された
列挙型 (ビットごとのフラグを説明するため) ですが、これが基本的な考え方です。

郵送 コンストラクタ


訪問 http://lists.ximian.com/mailman/listinfo/mono-devel-list 詳細については。

WEB サイト


訪問 http://www.mono-project.com 詳細については

ネイティブ マップの作成(1)

onworks.net サービスを使用して create-native-map オンラインを使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad