Nim импортировать typedef из файла заголовка C - PullRequest
0 голосов
/ 09 апреля 2019

Мне интересно, могу ли я импортировать определение типа 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

1 Ответ

1 голос
/ 09 апреля 2019

Компилятору 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
...