我想知道是否可以导入C类型定义或是否需要在Nim中重新定义它?
看与该proc接口的名为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
答案 0 :(得分:1)
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