Nim 从 C 头文件导入 typedef
Nim import typedef from C header file
我想知道我是否可以导入 C 类型定义,或者我是否需要在 Nim 中重新定义它?
正在查看与此过程交互的名为 jhead
的程序
int ReadJpegFile(const char * FileName, ReadMode_t ReadMode);
第二个参数ReadMode_t是jhead.h
中的枚举类型
typedef enum {
READ_METADATA = 1,
READ_IMAGE = 2,
READ_ALL = 3,
READ_ANY = 5 // Don't abort on non-jpeg files.
}ReadMode_t;
我可以导入这个 ReadMode_t
吗?或者我必须像下面那样重新定义它
type
ReadMode_t* = enum
READ_METADATA = 1, READ_IMAGE = 2, READ_ALL = 3, READ_ANY = 5
Nim 编译器需要了解这些 C 常量,因此您必须定义它们才能在 Nim 中使用它们。但是,使用 c2nim 等工具可以简化这种繁琐的复制,甚至在某种程度上实现自动化。事实上,如果你拿下面的 test.h
文件:
typedef enum {
READ_METADATA = 1,
READ_IMAGE = 2,
READ_ALL = 3,
READ_ANY = 5 // Don't abort on non-jpeg files.
}ReadMode_t;
int ReadJpegFile(const char * FileName, ReadMode_t ReadMode);
和运行c2nim test.h
,它会为你生成如下test.nim
文件,省去了大部分繁琐的翻译:
type
ReadMode_t* = enum
READ_METADATA = 1, READ_IMAGE = 2, READ_ALL = 3, READ_ANY = 5
proc ReadJpegFile*(FileName: cstring; ReadMode: ReadMode_t): cint
我想知道我是否可以导入 C 类型定义,或者我是否需要在 Nim 中重新定义它?
正在查看与此过程交互的名为 jhead
的程序
int ReadJpegFile(const char * FileName, ReadMode_t ReadMode);
第二个参数ReadMode_t是jhead.h
中的枚举类型
typedef enum {
READ_METADATA = 1,
READ_IMAGE = 2,
READ_ALL = 3,
READ_ANY = 5 // Don't abort on non-jpeg files.
}ReadMode_t;
我可以导入这个 ReadMode_t
吗?或者我必须像下面那样重新定义它
type
ReadMode_t* = enum
READ_METADATA = 1, READ_IMAGE = 2, READ_ALL = 3, READ_ANY = 5
Nim 编译器需要了解这些 C 常量,因此您必须定义它们才能在 Nim 中使用它们。但是,使用 c2nim 等工具可以简化这种繁琐的复制,甚至在某种程度上实现自动化。事实上,如果你拿下面的 test.h
文件:
typedef enum {
READ_METADATA = 1,
READ_IMAGE = 2,
READ_ALL = 3,
READ_ANY = 5 // Don't abort on non-jpeg files.
}ReadMode_t;
int ReadJpegFile(const char * FileName, ReadMode_t ReadMode);
和运行c2nim test.h
,它会为你生成如下test.nim
文件,省去了大部分繁琐的翻译:
type
ReadMode_t* = enum
READ_METADATA = 1, READ_IMAGE = 2, READ_ALL = 3, READ_ANY = 5
proc ReadJpegFile*(FileName: cstring; ReadMode: ReadMode_t): cint