이러한 종류의 연결을 위해 인터넷에서 발견 된 스 니펫을 사용했으며 작동합니다. 이제이 주제에 대해 더 자세히 이해하고자합니다. 즉, C++ 코드가 비 C++ 코드로 내보내기/링크 될 경우주의해야 할 사항은 무엇입니까? 누군가이 점에 유용한 자료를 가르쳐 주시겠습니까? 감사.비 C++ 코드와의 연결
답변
네이티브 코드 상호 운용성의 주요 개념은 name mangling 및 calling conventions입니다.
하지만 여기서 중요한 점은 일반적으로 코드를 다른 언어에서 호출 할 수있게하려면 (원하는 질문을 지정하지 않아야 함) 일반적으로 최저 공통 분모 접근 방식을 채택해야합니다. 대개는 객체를 피하고 기능적으로 생각하고 DLL에 코드를 래핑하고 C 스타일 인터페이스를 사용하는 것을 의미합니다. STDCALL 호출 규칙을 사용하여 DLL의 API 함수를 정의해야 할 것입니다.
또한 인터페이스에서 구조체를 사용하는 경우 구조체 패킹에 대해 걱정해야합니다. 예를 들어 압축 된 레코드를 사용하여 Delphi와 적절한 interop을 얻으려면 C 컴파일러에서 struct 멤버 정렬을 1 바이트로 설정해야한다고 생각합니다.
extern "C"
기능을 사용하십시오 ... here을 참조하십시오. 이것은 아마도 "크로스 플랫폼/언어"보다 훨씬 "C"수준에서 인터페이싱을 허용합니다.
이 거의 모든 것을 설명해야한다 : http://en.wikipedia.org/wiki/Compatibility_of_C_and_C++
또한 .... 밥 무어의 대답과 연계 ... 당신이
#ifdef __cplusplus extern "C" { #endif /* function prototypes and global variable declarations */ #ifdef __cplusplus } #endif
을 #ifdef를 사용하여 맹 글링 이름을 방지 할 수 있습니다 __cplusplus
지침 , <stddef.h>
에서 찾은 내 지식의 기준으로 정의됩니다 ...
희망, 최고, 탐.
이 속임수는 .cpp 파일이 아니라 헤더에만 사용되도록되어있다. –
- 1. Google 코드와의 지속적인 통합 (C# 응용 프로그램)
- 2. 중복 된 JavaScript 코드와의 충돌
- 3. 서버/클라이언트 C 프로그램의 오류 : "연결 : 비 소켓에서 소켓 작업"
- 4. 비 ASP.Net 응용 프로그램에서 연결 문자열 암호화
- 5. 레거시 TCHAR 코드와의 인터페이스에 적합한 스타일
- 6. 비 관리 C++ 코드를 C#
- 7. C# 비 지속적인 '정적'키워드?
- 8. C 데이터의 비 직렬화
- 9. 닷넷의 비 관리 C++
- 10. NHibernate 비 연결 테이블에 대한 기준
- 11. Qt 비 정적 연결 및 .pro 파일
- 12. 비 REST 사용자 지정 작업에 연결
- 13. 비 게으름 ptr 연결 오류 - 솔루션
- 14. 비 IDE C 개발 환경
- 15. C# TCP를 통한 비 직렬화
- 16. C# 비 관리 코드 호출
- 17. C++ : 비 임시 const 참조
- 18. C# 비 선형 그라디언트 브러시?
- 19. C#을 Linq에 비 모음
- 20. generative 프로그래밍을위한 비 C++ 언어?
- 21. C++ : 비 네이티브 유형의 프로모션
- 22. Java 소켓 연결 해제보고 C# 연결 해제
- 23. C++ 데이터베이스 연결?
- 24. C++ 연결 신호
- 25. C# 데이터베이스 연결 지연
- 26. P2P 연결 및 C#
- 27. LLVM 자동 C++ 연결
- 28. C++ 연결 오류 LNK2019
- 29. C# MySQL 연결 끊기
- 30. C# Exchange Server 연결
IT는 컴파일러의 전처리 지시어가 아닙니다. 기술적으로 extern은 '저장소 클래스 지정자'이고 'C'는 저장소 클래스의 '연결 식별자 지정'입니다. –
@Martin : 오 그래, 고마워. 조금 슬립 - 업 :-) – jldupont