2014-06-05 4 views
2

C와 C++로 작성된 libary에 문제가 있습니다.이 문제는 extern "C"로 선언 된 함수 포인터가 있지만 extern "C"로 선언되지 않은 C++ 함수 (내 경우에는 libary에서 함수를 호출 할 때 NULL 포인터)를 가리 킵니다. 코드에서 이제Extern "C"NULL 함수 포인터

:

function_from_lib(... , (int (*)()) NULL); 

자, 여기 당신은 내가 함수에 functionpointer를 전달할 것을 볼 수 있습니다. 문제는 내가 NULL을 가리키는 함수 포인터가 필요하지만 "NULL"이 가리키는 (어리석은) 함수는 extern "C"으로 선언되어야한다는 것입니다. 아무도 그러한 문제 또는 해결 방법을 해결하는 방법을 알고 있습니까? 함수가 어떻게 보이는지 실마리가 없지만 내 작업에는 NULL 함수 포인터가 필요합니다.

extern "C" int fkt() 
{ 
return NULL; 
} 
이 일한 것

을하지만 난 NULL 함수 포인터를 필요

그래서 다음과 같이 다른 기능을 통과해야합니다.

편집 :

음이 작동합니다

int fkt() 
{ 
return NULL; 
} 
... 

function_from_lib(... , fkt); 

을 그리고 지금은

function_from_lib(... , (int (*)()) NULL); 

functionpointer에 NULL을 전달해야

extern "C" int fkt() 
{ 
return NULL; 
} 
... 

function_from_lib(... , fkt); 

이 작동하지 않을 것입니다 그리고 그것은 ' 들 : t의 작품은 "C"

EDIT2 (오류 UPDATE)

ERROR: 
argument of type "I32(*)()" is incompatible with parameter of type "I32(*)() C" 
+0

당신이 시도하고 – nishantjr

+1

IIRC 작동하지 않습니다 무엇보다 완전한 코드 샘플을 추가하십시오,'통근 "C"는'단지 엉망이되는 함수 이름을 방지 (C++은 허용 하는가 예를 들어, 함수 오버로딩). 함수 포인터에 아무런 영향을 미치지 않습니다. 귀하가 실제로 저지른 실수는 무엇입니까? – Medo42

+0

이제 제가 의미하는 바가 조금 더 분명해지기를 바랍니다. –

답변

2

형식 정의 사용할 수있을를 외부 입력되지 않기 때문에. (나는 당신의 코드에 대해 불평하는 컴파일러에 접근 할 수 없기 때문에 이것을 검증 할 수 없다). 예를 들어 :

extern "C" 
{ 
    typedef int (*my_fp_type)(void); 
} 

function_from_lib(... , (my_fp_type)0);