2012-09-14 86 views

回答

2

有四個選項:

  1. 讓你想這樣的信號調用的方法。信號可以通過名稱GLib.Signal.emit_by_name (g_signal_emit_by_name)來命名。該調用來自GLib模式,但其他支持信號的模式可能有類似的方法。

  2. 在代碼中手動創建代表對象的靜態表/散列表。主要優點是它是類型安全的。缺點是你必須在兩個地方添加每種方法。它也將在所有的vala模式下工作。

  3. 另一種方法是告訴vala編譯器構建「gir」綁定並使用GObject Introspection庫來調用函數。這要複雜得多,但編譯器會爲你保留可用方法的列表。該方法特定於GLib模式。

  4. 最後一個選項是使用GLib的GLib.Module.symbol (g_module_symbol)函數來查找符號。您需要知道符號的「錯位」C名稱,它不會是類型安全的。你必須準確地匹配參數類型,並且介意調用者應該去的地方。它避免了GIR的開銷,但與GIR不同的是它不能告訴你哪些方法存在,只給你一個特定的方法。在GtkBuilder中連接信號時使用此方法。我提到了GLib的功能,但POSIX.dlsym可以用同樣的方法。

+0

我認爲第一種選擇最適合我。非常感謝您的幫助! –