2011-09-30 5 views
1

CORBA를 처음 사용하고 QT 애플리케이션 용 Corba 인터페이스를 만들려고합니다. CORBA에서 사용할 수있는 데이터 유형을 확인했지만 CORBA 함수에서 QT 객체를 매개 변수로 사용할 수 있는지는 잘 모르겠습니다. 내가 전달하고자하는 것은 QWSPointerCalibrationData입니다. 이제 나는 CORBA 서버 코드가 있다고 가정 해 봅시다 :CORBA : QT 객체를 매개 변수로 전달하는 방법

//pass data.screenPoints and data.devPoints 

CORBA::Boolean Calibrate(QWSPointerCalibrationData data) 
{ 
    ... 
} 
  • 이 가능합니까?
  • 그렇다면 IDL 파일에서 어떻게 선언합니까?
  • 그렇지 않은 경우 이러한 유형의 데이터를 전달할 수 있도록 어떤 CORBA 데이터 유형을 사용할 수 있습니까?

답변

4

코드를 갖고 있기 때문에 가능하지 않습니다. 애플리케이션에서 사용하는 IDL 유형과 동일한 IDL 유형을 지정하고 CORBA IDL에 정의 된 유형과 애플리케이션에 정의 된 유형 간의 (sigh, yes) 변환 기능을 제공해야한다. 장점으로는 내부적으로 자신의 유형을 사용하는 것처럼 통신 (또는 RPC) 기술의 향후 변경 사항에 대해 응용 프로그램을 숨길 수 있습니다. 이 경우, 문서에서 찾고 QWSPointerCalibrationData 유형은 두 개의 데이터 멤버가 있습니다

QPoint devPoints[5] 
QPoint screenPoints[5] 

그럼 먼저 QPoint 유형 및 IDL로 선언해야합니다을 다음 QWSPointerCalibrationData (나는 CORBA 유형을 나타 내기 위해 C_로 이름을 앞에 추가) :

다음
// IDL 
struct C_Point { long x; long y; }; 
typedef sequence<C_Point> Points; 
struct C_WSPointerCalibrationData 
{ 
    Points devPoints; 
    Points screenPoints; 
}; 

, 서버 방법이어야한다 :

CORBA::Boolean Calibrate(C_QWSPointerCalibrationData const& data) 
{ 
    QWSPointerCalibrationData qpcd = convert_from_CORBA_QWSPointerCalibrationData(data); 
    // use qpcd as usual here 
} 

사용자는 직접 convert_from_CORBA_QWSPointerCalibrationData 함수를 작성해야하며 해당 유형을 CORBA 카운터로 변환하는 해당 함수를 작성해야합니다. 전환을 수행하는 데 사용할 수있는 도구가 있지만 그래야만합니다.

+0

안녕하세요 디에고, 모든 정보 주셔서 감사합니다 ... 나는 그것을 시도해 보겠습니다! :) – Owen

+0

IDL에서 어떻게 Calibrate() 함수를 선언합니까? boolean Calibrate (C_QWSPointerCalibrationData const 및 data에서)로 선언하면 연산 매개 변수에 구문 오류가 발생합니다. – Owen

+1

IDL은 C++이 아니므로 "const &"가 없습니다. 그것을 제거하려고하면 작동합니다. –

관련 문제