내가 C++ 헤더를주고 API/lib/interface를 C 인터페이스로 변경하고 C 함수를 생성하여 C++ 코드를 호출 할 수있는 도구가 있습니까?C++ API를 C 인터페이스로 변경하는 생성기?
1
A
답변
4
나는 대부분 SWiG이 그렇게 할 것이라고 생각합니다.
0
이 작업을 자동으로 수행 할 수있는 도구에 대해 알지 못하는데, API에서 공용 함수에 대한 인수로 클래스를 사용하면 매우 까다로워 질 수 있습니다.
API가 단순하고 대부분 기본 유형을 사용하는 경우 너무 많은 작업을하지 않아도이 작업을 직접 수행 할 수 있습니다. 다음은 C++ 클래스 용 C 랩퍼의 빠른 예제입니다.
typedef void* TestHandle;
TestHandle newTest();
int deleteTest(TestHandle h);
int Test_do_something(TestHandle h, char* arg);
그리고 C 기능,하자가있는 C++ 파일을하게 될 C 구현 :
class Test {
public:
Test();
int do_something(char* arg);
bool is_valid(); // optional, but recommended (see below)
};
이 당신의 C 헤더 test_c.h
입니다 :의이 test.h
를 호출하자의이 바꿈하는 C++ 클래스입니다 가정 해 봅시다 test_c.cpp
말 :
extern "C" TestHandle newTest()
{
return (void*)new Test();
}
extern "C" int deleteTest(TestHandle h)
{
Test* this = static_cast<Test*>(h);
if (!this->is_valid())
return -1; // here we define -1 as "invalid handle" error
delete this;
return 0; // here we define 0 as the "ok" error code
}
extern "C" int Test_do_something(TestHandle h, char* arg)
{
Test* this = static_cast<Test*>(h);
if (!this->is_valid())
return -1; // here we define -1 as "invalid handle" error
return this->do_something(arg);
}
is_valid()
방법은 당신이 나쁜 핸들을 부여되지 않았 음을 보장 할 수있다. 예를 들어 magic number을 모든 인스턴스에 저장할 수 있으며 is_valid()
은 마법 번호가 있음을 보장합니다.
관련 문제
- 1. C++/CLI의 인터페이스로 어떻게 변환합니까?
- 2. C++ 상태 머신 생성기
- 3. WSDL 생성기 for C#
- 4. 랜덤 넘버 생성기 C#
- 5. 난수 생성기, C++
- 6. c - 난수 생성기
- 7. C#의 코드 생성기
- 8. C 함수 헤더 생성기
- 9. 파일을 변경하는 파서 생성기
- 10. 목표 C 용 코드 생성기
- 11. Objective-C 용 문서 생성기?
- 12. C++ 정식 클래스 선언 생성기
- 13. C++ XML 스키마 코드 생성기
- 14. 랜덤 long long 생성기 C++
- 15. C# -> Java 코드 생성기
- 16. 데이터베이스 스키마에서 C++ 코드 생성기
- 17. RELAX NG C++ 코드 생성기?
- 18. 로드 용 C 테스트 생성기
- 19. 전화 워드 생성기 도움말 C++
- 20. C++ : 기본 클래스의 일부가 아닌 인터페이스로 캐스팅
- 21. com 개체 인터페이스로 C# 클래스를 노출하는 방법?
- 22. 파이썬/C 클래스에 생성기 기능 추가
- 23. JSON API를 C#
- 24. 외부 디스플레이의 콘텐츠를 변경하는 인터페이스로 iPad 사용
- 25. C#을 사용자 인터페이스로 사용하여 Prolog를 추리 모듈로 호출
- 26. C++ API를 C#으로 자동 변환 하시겠습니까?
- 27. C++ 프로젝트에서 C gnutls API를 사용하는 방법
- 28. C/C++ API를 생성하는 PRBS 패턴의 필요성
- 29. C/C++에서 MATLAB API를 호출하십시오.
- 30. C# 코드의 래퍼로 C# API를 작성 하시겠습니까?