[완료]C에서 C__함수 호출하기에 대해 물어볼게요~
글쓴이: seacloud / 작성시간: 목, 2009/01/08 - 11:07오전
안녕하세요~ 다들 새해 복많이 받으세요~
제가
A 라는 class의 a객체를 생성한 후
A class내 getData()라는 함수를 호출하여 c로된 getDataforState()라는 함수를 실행한합니다.
그런데 getDataforState()함수를 호출하면 c코드로된 callback 함수안으로 이벤트가
들어와서 이 이벤트를 받을 것을 확인하고 다시 A class내 printState()라는 함수를 호출하게 되는데
class 내 함수를 호출 하기 위해서
A *aWrapper;
printStateWrapper()
{
aWrapper->printState();
}
위와 같은 식으로 callback함수내에서 printStateWrapper()를 호출하여
A class내의 printState()를 호출하게 되는데
제가 처음에 getData()를 한 A class의 객체와 callback에서 호출한
wrapper함수의 객체가 달라서 문제가 되네요..
이걸 해결할려면 어떤식으로 접근해야 하는지 조언 주시면 감사하겠습니다~
Forums:
저도 잘은
저도 잘은 모르지만,
A *aWrapper에 해당 a객체의 this pointer가 Maaping되어야 할거 같은데요.
Mapping안하면 printStateWrapper 이 함수에서 Exception 발생할 거 같은데요.
C함수를 호출할 때, aWrapper에 this pointer를 넣어주거나,
C함수 인자로 this pointer를 넘겨 줘서 printStateWrapper에서
해당 인자의 printState 함수를 실행하면 될거 같습니다.
후자가 좀 더 나은 듯 하네요..
혹시 틀리면 죄송해요. 처음 댓글 달아 보네요. ^^
답변
답변 감사드립니다.
그런데, c++ 코드상에서 생성된 객체 a의 this 포인터를 aWrapper에 넘길려면 어떻게 해야하나요?
잘 감이 안오네여ㅛ.ㅠㅠ
콜백함수의 형태에
콜백함수의 형태에 따라서 다르지만, 일반적으로는 콜백 함수에서 임의의 유저데이터를 넘길수 있도록 되있는 경우가 많습니다.
확인해보시고 그렇다면 유저데이터로 객체의 포인터를 넘겨주면 되겠지요.
그게 되지 않는다면 전역 변수를 이용하여 주고 받는 수밖에 없습니다.
이렇게 하심 될 거
이렇게 하심 될 거 같아요.
A::getData(...) { getDataforState((void*)this); }
.....
printStateWrapper((void*)arg)
{
(A *)arg->printState();
}
아니면
A::getData(...) { aWrapper = this; }
댓글 달기