英语法语西班牙文

OnWorks 网站图标

create-native-map - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 create-native-map

这是 create-native-map 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


create-native-map - C/C# 映射创建者

概要


创建本地地图 [选项]* 汇编-文件-名称输出-前缀

配置


--autoconf-header=标题
HEADER 是通常与 C 一起使用的语法中的头文件名 的#include
声明,例如 的#include or 的#include “本地.h” .

Autoconf 格式的宏是从包含名称生成的,以及一个 的#include
指令被包裹在一个 #ifdef 块中的 Autoconf 宏
产生 .c 文件中。

例如, --autoconf-header= 将生成代码:

#ifndef HAVE_STDIO_H
#包括
#endif /* ndef HAVE_STDIO_H */

--autoconf-member=成员
指定任何访问 MEMBER 应该包裹在一个 #ifdef 有会员
块。 MEMBER 可以是 字段名 或者 类名 . 字段名
组合。

例如,给定 C# 声明:

[Mono.Unix.Native.Map ("struct dirent")]
结构方向{
公共长 d_off;
}

然后 --autoconf-member=d_off 将生成类似于以下内容的代码:

INT
ToDirent(结构 dirent *from,结构 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 是一个 [DLL 导入] - 标记的方法应该 而不去 生成原型
为了它。

--impl-header=标题
插入一个 的#include 在生成的语句中 .c 文件 HEADER .

例如, --impl-header= 产生

#包括

--impl-macro=宏
插入一个 #定义 在生成的语句中 .c 文件中。 MACRO 可以包含一个 =
将宏名称与宏值分开。

例如, --impl-宏=FOO=42 产生

#定义FOO 42

--library=图书馆
创建原型 [DLL 导入] - 引用本机的标记方法
图书馆 图书馆 进入生成的 .h 文件中。

--public-header=标题
插入一个 的#include 在生成的语句中 .h 文件 HEADER .

例如, --public-header= 产生

#包括

--public-macro=宏
插入一个 #定义 在生成的语句中 .h 文件中。 MACRO 可以包含一个 =
将宏名称与宏值分开。

例如, --公共宏=FOO=42 产生

#定义FOO 42

--重命名成员=从=到
这用于 是 C 宏,因此必须更改才能使用
理智。 所有生成的对托管表示的引用都将使用 TO 代替
of .

例如,给定 C# 声明:

[Mono.Unix.Native.Map ("struct stat")]
结构统计{
公共长 st_atime;
}

和论点 --rename-member=st_atime=st_atime_ , 生成的 .h 文件会
包含:

结构统计{
gint64 st_atime_;
};

(注意更改的字段名称),而生成的 .c 文件将包含:

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

--重命名-命名空间=从=到
默认情况下,C 的“命名空间”(符号前缀)是 C# 命名空间; 内的类型
C# 命名空间 单声道.Unix.本机 将在 C“命名空间”中 Mono_Unix_Native 。 使用
--重命名命名空间 修改默认值,例如 - 改名-
命名空间=Mono.Unix.Native=Mono_Posix .

商品描述


创建本地地图 是针对特定场景的程序:保持紧密的代码
基于 C# 类型在 C 和 C# 之间同步耦合。

平台调用只有在托管代码知道所有的确切类型和布局时才有用
它使用的非托管结构。 在 Windows 上通常是这种情况,但它是 而不去 的情况下
在 Unix 上。 例如, 结构 统计 使用大小不同的类型
平台到平台(甚至基于定义的编译器宏!)。 例如, 关闭_t
在 ILP32 平台上通常是有符号的 32 位整数,但也可能是有符号的 64 位整数
在 LP64 平台上,但也可能是 ILP64 平台上的 32 位有符号整数,如果
_文件偏移位 宏的值为 64。简而言之,Unix 中的一切都是灵活的,
托管代码无法处理这种灵活性。

因此,利基 创建本地地图 :假设托管代码可以定位一个固定的 ABI,
并生成代码以将托管表示“thunk”到相应的本机
陈述。 这需要为 一切 可能因平台而异
编译器标志,来自枚举值 ( 信号总线 在 FreeBSD 上的值为 10,但在 FreeBSD 上为 7
Linux)来构造成员(有多大 关闭_t ?)。

创建本地地图 会检查 汇编文件名 并输出以下文件:

输出前缀.h
包含枚举值、类和结构声明、委托
声明,以及 [DLL 导入] - 标记的方法(来自指定的库
- 图书馆 ) 在程序集中 汇编文件名 .

输出前缀.c
包含枚举和结构转换的实现
功能。

输出前缀.cs
包含一个部分类 本地转换 包含枚举翻译
方法。

输出前缀.xml
为枚举翻译生成 ECMA XML 文档存根
方法 输出前缀.cs .

创建本地地图 主要寻找 地图属性 - 装饰类型,并使用两个
地图属性 特性:

原生类型
包含相应的 C 类型。 只有在应用于类时才有用,
结构和字段。

抑制标志
当在枚举成员上指定时 [旗帜] -修饰的枚举
类型, 禁用 对位屏蔽枚举的普通代码生成器支持
类型。

当位掩码和非位掩码信息存储在
相同类型,位掩码检查不应用于非位掩码
值。 例子: Mono.Unix.Native.FilePermissions.S_IFREG ,这不是一个
位掩码值,而大部分 文件权限 由位掩码值 (
文件权限.S_IRUSR , 文件权限.S_IWUSR 等)。

这款 地图属性 可以在类、结构、委托、字段和
枚举。

代表
委托的代码生成忽略 地图属性.NativeType 财产,以及
生成函数指针 类型定义 最匹配委托声明
.h 文件中。

例如,

命名空间 Foo {
[地图]
委托字符串 MyCallback(字符串 s);
}

产生 类型定义 :

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

类和结构
A [地图] - 修饰的类或结构将在
.h 文件:

[地图]
结构 Foo {
公共国际我;
}

成为

结构 Foo {
公共国际我;
};

如果 地图属性.NativeType 属性被设置,那么转换函数将是
内宣布 .h 文件并在 .c 文件:

命名空间 Foo {
[地图(“结构统计”)]
结构统计{
公共单位 st_uid;
}
}

成为

/* .h 文件 */
结构 Foo_Stat {
无符号整数 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(结构 Foo_Stat *from,结构 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)具有
地图属性.NativeType 属性设置,然后将使用指定的本机类型
用于溢出检查。 例如:

命名空间 Foo {
[地图(“结构统计”)]
结构统计{
[Map("off_t")] public long st_size;
}
}

产生

/* .h 文件 */
结构 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(结构 Foo_Stat *from,结构 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返回;
}

这对于在转换函数中进行更好的错误检查很有用。
地图属性.NativeType 这是必需的,因为没有其他方法可以知道什么
本机类型是(不解析系统头文件......)。

枚举
为每个成员生成 C 枚举和宏
枚举。 函数也声明在 .h 文件和
在实施 .c 文件中。

例如,

命名空间 Foo {
[地图]
枚举错误{
有效值
}
}

将在 .h 文件:

枚举 Foo_Errno {
Foo_Errno_EINVAL = 0,
#define 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)
{
*到 = 0;
如果(来自 == Foo_Errno_EPERM)
#ifdef EINVAL
{*to = EINVAL;}
的#else
{错误号 = EINVAL; 返回-1;}
#ENDIF
0返回;
}

INT
Foo_ToErrno(int from,int *to)
{
*到 = 0;
#ifdef EINVAL
如果(来自 == EINVAL)
{*to = Foo_Errno_EPERM; 返回 0;}
#ENDIF
return -1;
}

如果托管枚举是一个,将生成不同的代码 [旗帜] 装饰
枚举(考虑按位标志),但这是基本思想。

邮寄 LISTS


访问 http://lists.ximian.com/mailman/listinfo/mono-devel-list 了解详情。

WEB 站点


访问 http://www.mono-project.com 了解详细信息

创建本地地图(1)

使用 onworks.net 服务在线使用 create-native-map


免费服务器和工作站

下载 Windows 和 Linux 应用程序

  • 1
    克莱门汀
    克莱门汀
    Clementine 是一种多平台音乐
    玩家和图书馆组织者的灵感来自
    阿玛洛克 1.4。 它有一个快速和
    易于使用的界面,并允许您
    搜索和...
    下载克莱门汀
  • 2
    西马
    西马
    注意:累积更新 2.4.3 有
    被释放了!! 该更新适用于任何
    以前的 2.xx 版本。 如果升级
    从 v1.xx 版本开始,请下载并
    我...
    下载 XISMuS
  • 3
    黑脸
    黑脸
    模块化头部跟踪程序
    支持多种面部跟踪器、过滤器
    和游戏协议。 在跟踪器中
    是 SM FaceAPI,AIC 惯性头
    追踪器...
    下载 facetracknoir
  • 4
    PHP 二维码
    PHP 二维码
    PHP 二维码是开源的 (LGPL)
    用于生成二维码的库,
    二维条码。 基于
    libqrencode C 库,提供 API
    创建二维码条...
    下载 PHP 二维码
  • 5
    自由文明
    自由文明
    Freeciv 是一款免费的回合制游戏
    多人策略游戏,其中每个
    玩家成为领导者
    文明,争取获得
    最终目标:成为...
    下载免费文明
  • 6
    布谷鸟沙盒
    布谷鸟沙盒
    Cuckoo Sandbox 使用组件来
    监控恶意软件的行为
    沙盒环境; 从
    系统的其余部分。 它提供自动化
    分析...
    下载布谷鸟沙盒
  • 更多 ”

Linux 命令

Ad