废话:
工作上用到了,开始也不知道怎么弄,网上也没有现成的例子,只好自己搞了,不废话。
如果你的Demo已经能够进行正常的方法调用和信号发射,那么你可以继续,否则,你还是先调通了那些再说。
这里只简单罗列需要改动的地方,不提供详细的做法
需要改动的地方
这里假设我的结构体是:
-
typedef struct PassStruct
-
{
-
int ID;
-
char p[36];
-
}PassStruct;
1.在编写的GObject文件的g_signal_new函数里修改(也可能你已经封装在别的地方了)
-
signalId = g_signal_new (
-
"signalName",
-
G_OBJECT_CLASS_TYPE(klass),
-
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-
0,
-
NULL,NULL,
-
g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1,
-
//G_TYPE_STRING); //参数类型
-
DBUS_TYPE_G_UCHAR_ARRAY);//使用这个类型
2.在发射信号的函数里,这样书写
-
PassStruct pa;
-
memset(&pa,0,sizeof(pa));
-
pa.ID=1000;
-
strcpy(pa.p,"ccccc\n");
-
GArray *pass= NULL;
-
pass = g_array_sized_new(FALSE,TRUE,sizeof(int),sizeof(pa));
-
//memcpy(kotei_junz->data, &pa, sizeof(pa));
-
g_array_append_vals(pass,&pa,sizeof(pa));
-
g_signal_emit( obj,signalId,0,pass );
-
g_array_free(pass,TRUE);
-
dbus_g_proxy_add_signal (remoteValue,"signalName",DBUS_TYPE_G_UCHAR_ARRAY,G_TYPE_INVALID);
阅读(2835) | 评论(0) | 转发(0) |