2017-09-14 52 views
1

我寫在瓦拉這個代碼,使用駱駝瓦拉錯誤「未知類型名稱」使用枚舉從駱駝

using Camel; 
[...] 
MimeParser par = new MimeParser(); 
[...] 
par.push_state(MimeParserState.MULTIPART, boundary); 

我下載了駱駝1.2.vapi從GitHub VALA-girs (this link),把它在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類型被多次使用,但從未定義過。這應該是一個簡單的枚舉因爲駱駝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文件中是否有錯誤?

回答

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, 
    [...] 

正常工作。