2013-08-12 6 views
0

코드 C++g_idle_add()을 사용해야합니다. 여기에 GSourceFunc은 다른 클래스 함수이며 일부 인수도 전달해야합니다. C 코드로만 사용했습니다. 그래서 정직 바로C++에서 g_idle_add()를 사용하는 중에 오류가 발생했습니다.

는 C 코드에서 g_idle_add()를 사용하는 동안 내가 일을 못하고 있어요 될 수있다

C 프로그램

g_idle_add ((GSourceFunc) functionA, someData);

functionA 그 C 프로그램 파일 범위 및 someData 정의 함수

C++ 프로그램을 구성에게이다

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

또한 함수 B에 하나 이상의 인수를 전달해야하는 시나리오를 고려하십시오.

차이점은 g_idle_add에서 호출 된 함수의 범위에 대한 것입니다. 위의 예제 C++ 코드에서와 같이 g_idle_add()를 호출 할 수 있습니까?

답변

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); 
+0

감사합니다, 나는이 경우 functionB – user2618142

+0

에 하나 개 이상의 인수를 전달해야하는 경우, 당신은 (functionB''에 구조를 통과해야 무엇을 예를 들어 'myCFunction' 너무), 필요한 모든 데이터를 포함합니다. – nouney