문제

고 부를 수 있는 C++기능 Ada?

는지 궁금하네요가있는 경우 방법이 없이 직접적으로 일을 구현 C 고 쓰는 C++wrapper&Ada wrapper,예를 들어,내가 가고 싶은 c++->Ada 보다는 c++->c>Ada.

도움이 되었습니까?

해결책

문제 Ada C++는 C++에 정의되어 있지 않 ABI.
각 컴파일러가 허용되을 정의하는 가장 효율적인 ABI 그것을 할 수 있습니다.

따라서 인터페이스에서 다른 언어(Ada)는 것은 고통 당신이 필요하 Ada 컴파일러 알고 있는 C++컴파일러와 컴파일하기 전에 그것을 생성할 수 있는 올바른 코드를 호출해서는 C++방법이 있습니다.

다른 한편으로는 C ABI 이 잘 정의된 표준에 걸쳐 모든 컴파일러와 같은 제공한 인터페이스에 대한 모든 언어와 연결.

다른 팁

내가 당신에게 줄 수있는 유일한 컴파일러 공유 답변은 시스템에서 C에서 C ++를 호출하는 것만 큼 가능한 한 적절하다는 것입니다.

C와 마찬가지로 C ++ 루틴의 이름 완화 된 기호를 파악하고 그 엉망인 이름과 연결되는 C (이 경우 ADA) 측면에 바인딩을 작성해야합니다. C ++ 기능을 외부로 선언하는 것과 같이 C ++ 측에서 몇 가지 작업을 수행해야 할 수도 있습니다.

C ++ 기능을 extern "C"라고 선언 할 수 있다면 쉽습니다. C ++ 측에서이를 수행하고 ADA 측에서 ADA의 표준 C 가져 오기 기능을 사용하십시오.

예시:

CPP에서 :

extern "C" int cpp_func (int p1, int p2) {
   ; // Whatever..
}

.adb에서 :

function cpp_func (p1, p2 : Interfaces.C.Int) return Interfaces.C.Int;
pragma Import (C, cpp_func); 

...
Result : constant Interfaces.C.Int := cpp_func (1, 2);

이 백서에 관심이있을 수 있습니다.이 논문은 C ++에 대한 ADA의 객체 수준 바인딩에 대해 설명합니다.

http://www.adacore.com/uploads/technical-papers/class_level_interfacing.pdf

또한 최근 버전의 GNAT에는 강력한 자동 바인딩 생성기가 특징입니다.

불가능한 것 같습니다 ...

정보 여기

"ADA에서 C ++의 직접 인터페이스는 ADA의 범위를 벗어납니다 (최소 95)."

Swig가 할 수 있습니다

99/00 이후로 ADA를 만지지 않았으므로 메모리는 약간 스케치 할 수 있지만 ADA의 그래픽 Windows 앱을 작업 할 때 C ++ (비 임무 중요)에서 일부 작업을 수행해야했으며 두 가지를 통합하는 방식이 필요했습니다. DLL에 C ++ 물건을두고 해당 DLL에 C 래퍼를 작성한 다음 C 래퍼를 지정하는 Pragma 인터페이스를 사용한 다음 해당 인터페이스에서 DLL 내의 메소드를 호출 할 수있었습니다.

메소드 서명이 Pragma 인터페이스에서 업데이트되어야하고 C 래퍼가 C ++ DLL에서 변경된 경우 일부 트리플 유지 보수에 해당한다고 생각합니다.

기본적으로 그것은 고통이었습니다. C 래퍼에서 Win32 Lean 및 Mean Prempler Directive를 사용해야한다고 생각합니다.

어쨌든, 그것은 프로젝트에서 일한 우리 모두가 기억할 수있는 세 사람입니다.

Green Hills Software는 이것에 대한 훌륭한 PDF를 발표했습니다.
http://www.ghs.com/download/whitepapers/ada_c++.pdf

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top