Vala错误“未知类型名称”使用来自骆驼的枚举

时间:2017-09-14 08:08:45

标签: enums vala

我正在使用Camel

在Vala中编写此代码
using Camel;
[...]
MimeParser par = new MimeParser();
[...]
par.push_state( MimeParserState.MULTIPART, boundary );

我从github vala-girs (this link)下载了 camel-1.2.vapi ,将其放在 vapi 子目录中并使用

进行编译
valac --vapidir=vapi --includedir=/usr/include/evolution-data-server/camel --pkg camel-1.2 --pkg posix --target-glib=2.32 -o prog prog.vala -X -lcamel-1.2

编译我收到此错误:

error: unknown type name "CamelMimeParserState"
 const gchar* camel_mime_parser_state_to_string (CamelMimeParserState self);

查看C输出代码我看到CamelMimeParserState类型多次使用但从未定义。它应该是一个简单的枚举,因为 camel-1.2.vapi 文件说:

[CCode (cheader_filename = "camel/camel.h", cprefix = "CAMEL_MIME_PARSER_STATE_", has_type_id = false)]
public enum MimeParserState {
            INITIAL,
            PRE_FROM,
            FROM,
            HEADER,
            BODY,
            MULTIPART,
            MESSAGE,
            PART,
            END,
            EOF,
            PRE_FROM_END,
            FROM_END,
            HEADER_END,
            BODY_END,
            MULTIPART_END,
            MESSAGE_END
    }

那么为什么C输出代码不会像vapi文件那样只使用枚举(由 cprefix CAMEL_MIME_PARSER_STATE _ 描述)?

.vapi文件中是否有错误?

1 个答案:

答案 0 :(得分:3)

我找到了解决方案。 vapi文件错误,因为缺少 cname 字段。更改vapi文件,添加 cname =" camel_mime_parser_state_t"

[CCode (cheader_filename = "camel/camel.h", cname="camel_mime_parser_state_t", cprefix = "CAMEL_MIME_PARSER_STATE_", has_type_id = false)]
public enum MimeParserState {
    INITIAL,
    [...]

正常工作。