我很舒服C.但需要学习GObject和Glib进行gstreamer.我在网上找到的只是Gobject参考手册.它很好,但寻找Gobject/Glib的教程,主要关注gstreamer.
所以请分享任何其他资源来学习滑稽和gobject.
我试图让pygobject-2.28.6在cygwin中编译(存储库中的版本是2.28.4,这有一些问题).这是./configure的尾部:
checking for GLIB - version >= 2.24.0... yes (version 2.34.3)
checking for ffi... checking for FFI... yes
checking for GIO... yes
checking for GIOUNIX... yes
checking for GI... no
configure: error: Package requirements (glib-2.0 >= 2.24.0
gobject-introspection-1.0 >= 0.10.2
) were not met:
No package 'gobject-introspection-1.0' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables GI_CFLAGS
and GI_LIBS to avoid the need to call pkg-config.
See …Run Code Online (Sandbox Code Playgroud) 我一直在研究python-mpdor的源代码,它提到它是
基于gobject,用于简单的事件处理(在高级客户端类中).
有人可以用简单的语言向我解释究竟是什么Glib,GObject以及它们如何相互作用以及它在事件处理中扮演什么角色.
我试着寻找Glib,GObject但我没有找到任何基本的解释.我发现的所有解释都非常技术性和技术性,我的意思是不适合初学者.
此外,有人可以指向一些关于和的初学者教程/文章.GlibGObject
好吧,因此在GTK +版本0.60之后,设计人员意识到,为了将来的开发和进步,整个工具包需要被重写为面向对象.
现在,由于C不支持OOP,为了提供面向对象和继承heiriearchies,他们创建了GObject系统.现在创建GObject系统必须具有所需的开发时间,更多依赖性,更多问题,但他们必须创建它以向C编程语言提供面向对象的功能.但在那个时候,有是提供另一种解决方案恰好的是,C++!
为什么GTK +的开发人员只使用C++?
我的意思是,为什么浪费时间创建整个库而不是使用许多项目采用的经过时间考验的解决方案?不要误会我的意思,我不是想把这篇文章变成C vs C++的东西(我在论坛上已经有足够的了,谢谢你).我只是想知道让GTK +的设计师做出决定的原因和问题.
根据GObject参考
g_signal_connect_swapped(instance,detailed_signal,c_handler,data); 将GCallback函数连接到特定对象的信号.调用处理程序时将发出信号的实例和数据将被交换.
我不明白这意味着什么.这是否意味着data将指向指向的对象instance和instance将指向被指向的对象data还是我在这里犯了一个错误?
如果是前者,那么这背后的逻辑是什么?
PyGObject似乎没有真正的文档.本教程尽可能接近.我整个上午一直在努力寻找Gtk.Window构造函数接受的参数的描述.我似乎无法在Python中做太多反思,因为PyGObject中的所有内容都是动态生成的.
我想要的只是知道我可以传递给这个构造函数的参数!在GTK + 3文档中似乎没有相应的此对象,并且阅读源代码以确定绑定已被证明是一项非常艰巨的任务.有任何想法吗??
我是Vala的新手.我不熟悉GObject.据我了解,GObject是从GNOME的GLib项目中分离出来的.如我错了请纠正我.
我非常喜欢Vala的语法和实现,但我并不打算为GNOME编写桌面应用程序.
我也知道(我想知道)Vala没有GObject本身以外的标准库.
所以我的问题是:Vala可以在没有GObject的情况下使用吗?如果可以的话,它是否可用(是否有最佳和维护的基础库,用于常见的事情,如类型转换,数学,字符串操作,缓冲等等......可用)?
我编写了一个python脚本来使用gstreamer(pygst和gst模块)来计算replaygain标签,并且它与各种gobject错误不一致.我发现你可以通过在脚本顶部放置以下样板来解决这个问题:
import gobject
gobject.threads_init()
Run Code Online (Sandbox Code Playgroud)
我试了一下,它运作了.任何人都可以解释为什么这些行是必要的,为什么pygst本身不这样做?
我需要一些窗口来托管webkit或/和cairo drwaing,但我必须首先处理所有这些以了解我正在做什么.
现在.我迷失了,不再理解那是什么了.
当我尝试使用绑定或试图确定什么是依赖项时,事情变得更糟.例如:在python中,pyGtk已弃用并被pyGObject替换(有时称为pyGl !!)
有许多网站,许多下载和版本,混合过时和新的参考,但没有一个整体的架构视图.
什么我不明白..这些东西是如何在太多的网站,包和版本中相互混合的?
我反复讨论在GTK +代码中设置信号处理程序的问题,不需要几个参数,并试图使用与处理程序相同的函数来处理多个信号,其处理程序具有不同的签名 - 但是使用前N个参数(我关心的那些)同样的.
它是否安全(在某种意义上它不是未定义的行为,而不是更实用的"它在我的PC上工作吗?")将指针传递给GObject API,当这些函数期望参数少于它们时实际上是从信号发射过程中获得的?
或者,将此与GTK +离婚,这段代码还可以吗?
/* Note: No void *userdata argument! */
void show(int x) {
printf("x = %d\n", x);
}
void do_stuff(void (*fn)(int, void *), void *userdata) {
static int total = 0;
(*fn)(total, userdata);
total++;
}
void doitnow(void) {
do_stuff(&show, NULL);
}
Run Code Online (Sandbox Code Playgroud)
要获得额外的功劳,请讨论功能签名和呼叫站点之间不同返回值类型的含义.
编辑:一个几乎相同的问题更密切地探测"兼容的函数类型",并直接解决我的具体问题 - 链接GObject信号处理程序.TL; DR:是的,它是未定义的行为,但它在某些工具包中实际上是惯用的(尽管不是强制性的).