C함수에서 C++함수 호출하기
글쓴이: coathanger / 작성시간: 수, 2008/04/30 - 10:42오전
안녕하세요.. 검색 해 보니 중복되는 질문이지만 이해력이 부족하여 게시물 등록을 하게되었습니다.
//C++ 함수 void CUFPT::ControlSlTimer() { //statement.. } //C 함수 void Caller(void) { ControlSlTimer(); }
위와 같이 C++함수와, C함수를 같은 소스파일안에 사용하고 있습니다. 그런데 C++ 클래스 내부함수인 CUFPT::ControlSlTimer()를
C함수 내에서 위와 같이 void Caller(void)인 C함수에서 호출하려면 어떻게 해야 하나요..
검색 해 보았더니 extern "C"로 C++을 감싸라고 하는데.. 제가 잘 몰라서 해봤더니 되지 않더군요...
클래스 정의 부분도 extern "C"로 감싸야 하는지.. 내부함수 정의 부분도 감싸야 하는지 방법을 모르겠습니다.
감싸는 방법과 호출할 경우 위 처럼 해도 되는건지 지도 부탁 드립니다.;; 불가피하게 C++함수를 호출해야 하는데.. 골치 아프군요..
Forums:
제가 알기로는
제가 알기로는 다음과 같이 알고 있습니다.
* C++ 함수에서 C함수를 호출할 수 있다.(extern "C" 사용)
* C함수에서 C++ 함수는 호출할 수 없다.
C++ 멤버 함수를 C에서 호출하려면 좀 귀찮은 방법을 거쳐야합니다.
일단 C에서 this pointer를 모르기 때문에, 이런 래퍼가 필요합니다. (그리고 C++ linkage가 아니라 C linkage로 만들게 extern "C"로 선언된 함수여야합니다)
extern "C" void call_cpp_function( void* CUFPT_object )
{
((CUFPT*)CUFPT_object)->ControlTimer();
}
같은 형식으로 선언하고, 함수를 호출할 객체를 넘겨주면서 호출하면됩니다.
(다만 class 선언을 인식 못할테니 void* 로 캐스팅해서 전달하게 되죠)
답변 감사합니다.
그러나 위 함수를 만들고 호출하는 곳은 C함수인데 객체가 C함수에서 안만들어 집니다.
어떤 식으로 객체를 만들어서 넘기는건지.. 죄송합니다..
당연히 C++
당연히 C++ 코드쪽에서 만들어야죠.
대략 이런 식으로 하면 됩니다.
감사합니다.
상세한 답변 정말 감사합니다. (_ _)
댓글 달기