2010-01-07 3 views
3

이러한 종류의 연결을 위해 인터넷에서 발견 된 스 니펫을 사용했으며 작동합니다. 이제이 주제에 대해 더 자세히 이해하고자합니다. 즉, C++ 코드가 비 C++ 코드로 내보내기/링크 될 경우주의해야 할 사항은 무엇입니까? 누군가이 점에 유용한 자료를 가르쳐 주시겠습니까? 감사.비 C++ 코드와의 연결

답변

5

네이티브 코드 상호 운용성의 주요 개념은 name manglingcalling conventions입니다.

하지만 여기서 중요한 점은 일반적으로 코드를 다른 언어에서 호출 할 수있게하려면 (원하는 질문을 지정하지 않아야 함) 일반적으로 최저 공통 분모 접근 방식을 채택해야합니다. 대개는 객체를 피하고 기능적으로 생각하고 DLL에 코드를 래핑하고 C 스타일 인터페이스를 사용하는 것을 의미합니다. STDCALL 호출 규칙을 사용하여 DLL의 API 함수를 정의해야 할 것입니다.

또한 인터페이스에서 구조체를 사용하는 경우 구조체 패킹에 대해 걱정해야합니다. 예를 들어 압축 된 레코드를 사용하여 Delphi와 적절한 interop을 얻으려면 C 컴파일러에서 struct 멤버 정렬을 1 바이트로 설정해야한다고 생각합니다.

5

extern "C" 기능을 사용하십시오 ... here을 참조하십시오. 이것은 아마도 "크로스 플랫폼/언어"보다 훨씬 "C"수준에서 인터페이싱을 허용합니다.

+0

IT는 컴파일러의 전처리 지시어가 아닙니다. 기술적으로 extern은 '저장소 클래스 지정자'이고 'C'는 저장소 클래스의 '연결 식별자 지정'입니다. –

+0

@Martin : 오 그래, 고마워. 조금 슬립 - 업 :-) – jldupont

0

또한 .... 밥 무어의 대답과 연계 ... 당신이

 
#ifdef __cplusplus 
extern "C" { 
#endif 

/* function prototypes and global variable declarations */ 

#ifdef __cplusplus 
} 
#endif 

을 #ifdef를 사용하여 맹 글링 이름을 방지 할 수 있습니다 __cplusplus 지침 , <stddef.h>에서 찾은 내 지식의 기준으로 정의됩니다 ...

희망, 최고, 탐.

+0

이 속임수는 .cpp 파일이 아니라 헤더에만 사용되도록되어있다. –