C ++ 프로그램에서 C 헤더를 어떻게 사용하나요?

Win 32 dll 파일을 생성하는 Visual Studio 2010 프로젝트를 진행 중입니다. 내가 가진 예제는 C 파일이며 컴파일 및 잘 작동합니다. 제가 작성한 C ++ 함수의 일부 기능을 통합하고 싶지만 약간의 벽에 부딪 혔습니다.

C ++ 함수를 C 프로그램에 연결하려고하면,문자열 등에 대해 전혀 알지 못하며 전혀 작동하지 않습니다 (물론).

예제를 C ++ 프로그램으로 변경해야합니다. 그러면 다른 파일을 면책없이 사용할 수 있습니다. 이 작업을 시도 할 때 이해하지 못하고 해결 방법이 불확실하다는 링크 오류가 표시됩니다.

이 예제에서는 공급 업체가 제공 한 헤더를 사용하며, 여기에는 다음과 같은 문이 포함됩니다. , 다음 예 :

extern BINDING_PROC_BEVNT       b_evnt;

그러면 다음과 같이 쓸 수 있습니다.

b_evnt(choice, &status, &inpEvent, &outpEvent);

공급 업체 제공 C 파일에서 이들은 다시 다음과 같이 참조됩니다.

BINDING_PROC_BEVNT      b_evnt; 
b_evnt = (BINDING_PROC_BEVNT)GetProcAddress(hCNCMod, "bevnt");

내가보고있는 링커 오류는 다음과 같습니다.

error LNK2001 : unresolved external symbol "void (__cdecl * b_evnt) (unsigned short, short *, union I_EVNT_T *, union O_EVNT_T *)"(? b_evnt @@ 3P6AXGPAFPATI_EVNT_T @@ PATO_EVNT_T @@@ ZA)

내 주 파일의 이름을 바꾸고 a C 프로그램을 사용하고 내 C ++ 함수를 생략하면 모든 것이 완벽하게 컴파일됩니다. 메인 파일이 C ++ 파일로 처리되는 경우에도 Intellisense는 정의를 인식하는 것 같습니다 (올바른 정의를 가리키면 표시됨).

추가적으로 몇 가지 다른 위치에 외부 "C"를 추가하려고했지만 보이지 않는 것 같습니다. C ++ 파일에서 차이를 만들기 위해 C 파일에서 컴파일 오류를 생성했습니다 (문자열에 대해 알지 못함).

어떤 통찰력이라도 감사 할 것입니다. 오늘 너무 오래 쳐다 보았을 것입니다. 분명한 것이거나 내가 완전히 모르는 것일 수 있습니다.

도움을 주셔서 감사합니다!

5
задан Stephen 22 August 2011 в 13:58
поделиться