Vala 错误 "unknown type name" 使用来自骆驼的枚举
Vala error "unknown type name" using enum from camel
我正在使用 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 类型被多次使用 但它从未被定义。它应该是一个简单的 enum 因为 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 文件是否有错误?
我找到了解决方案。 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,
[...]
工作正常。
我正在使用 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 类型被多次使用 但它从未被定义。它应该是一个简单的 enum 因为 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 文件是否有错误?
我找到了解决方案。 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,
[...]
工作正常。