我想知道是否可以导入 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
关于ffi - Nim 从 C 头文件导入 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55585758/