【发布时间】:2011-02-13 16:44:52
【问题描述】:
我尝试使用 Glibmm(Gtkmm 的一部分)在 C++ 中实现 GType 接口。该对象将被传递给 C 中的 API。不幸的是,gtkmm 的 documentation 并没有涵盖它如何包装 GObject 系统的许多细节。
到目前为止我所拥有的:
class MonaCompletionProvider : public gtksourceview::SourceCompletionProvider, public Glib::Object
{
public:
MonaCompletionProvider();
virtual ~MonaCompletionProvider();
Glib::ustring get_name_vfunc() const;
// ... and some more
}
所有方法和构造函数的实现都是空的。代码是这样使用的:
Glib::RefPtr<MonaCompletionProvider> provider(new MonaCompletionProvider());
bool success = completion->add_provider(provider);
success 将在执行此代码后为假,并在命令行中出现以下消息:
(monagui:24831): GtkSourceView-CRITICAL **: gtk_source_completion_add_provider: 断言 `GTK_IS_SOURCE_COMPLETION_PROVIDER (提供者)'失败
似乎底层的gobj() 并不知道它应该实现这个接口。如果类不是从Glib::Object 派生的,gobj() 甚至会返回 null。我希望我不必在 C 中手动编写实现此接口的 GObject。
那么正确的方法是什么?提前致谢。
PS:有兴趣的朋友:SourceCompletionProvider
【问题讨论】:
-
也许this 是您一直在寻找的关于 gtkmm 如何包装 GObject 系统的内容
-
我在尝试在 gstreamermm 中继承 Gst::AudioSink 时遇到了一个相关问题 - 请参阅 stackoverflow.com/questions/49986814/interfacing-gobject-with-c 是否有更好的描述 gmmproc 试图创建的映射?