Nim从C头文件导入typedef

问题描述 投票:0回答:1

我想知道我是否可以导入C类型定义或者我是否需要在Nim中重新定义它?

看看名为jhead的程序与这个proc接口

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;

我可以导入这个qazxsw poi吗?或者我必须像下面那样重新定义它

ReadMode_t
ffi nim
1个回答
1
投票

Nim编译器需要知道那些C常量,所以你必须定义它们才能在Nim中使用它们。然而,这种繁琐的复制可以通过type ReadMode_t* = enum READ_METADATA = 1, READ_IMAGE = 2, READ_ALL = 3, READ_ANY = 5 等工具在某种程度上简化甚至自动化。事实上,如果你采取以下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
© www.soinside.com 2019 - 2024. All rights reserved.