在C ++中使用g_idle_add()时出错,同样适用于C语言

时间:2013-08-12 11:24:02

标签: c gstreamer glib gobject

我需要在g_idle_add()代码中使用C++,其中GSourceFunc是另一个类函数,并且还必须传递一些参数。已经看到它仅在C代码中使用。所以我可能没有把事情做对

在C代码中使用g_idle_add()是直截了当的

C程序

  

g_idle_add((GSourceFunc)functionA,someData);

其中 functionA 是在该C程序文件范围中定义的函数,而 someData 是一个结构

C ++程序

  

g_idle_add((GSourceFunc)(mObjOfAnotherClass-> functionB(*   p_SomeVariable)),NULL)

另外,考虑我必须向functionB

传递多个参数的场景

这里的区别是关于从g_idle_add调用的函数的范围。我可以调用g_idle_add(),就像我在上面的示例C ++代码

中所做的那样

1 个答案:

答案 0 :(得分:2)

指向函数的指针与指向类方法的指针不同。如果要使用指向方法的指针,则必须具有该类的对象。您应该将方法包装在C函数中。例如:

extern "C"
{
    void myCFunction(void *p_SomeVariable)
    {
        // store your object where you want 
        static AnotherClass    mObjOfAnotherClass; 
        mObjOfAnotherClass.functionB(*p_SomeVariable);  
    }
}

然后:

g_idle_add ((GSourceFunc) myCFunction, p_SomeVariable);