2014-02-13 8 views
3

우리는 C++ 서버에서 OmniORB를 사용하고 있습니다. 현재 IDL 파일에서 객체가 char으로 지정되면 C++에서는 unsigned char으로 변환됩니다. 우리는 그것이 단지 char이되기를 바랍니다. 우리가 이것을 가능하게하기 위해 바꿀 수있는 것이 있습니까?CORBA IDL에서 C++로 - char 대 unsigned char?

+0

그래, char를 기본적으로 unsigned (즉, -funsigned-char')로 처리하도록 컴파일러를 구성하십시오. –

+2

"CORBA IDL을 C++ 매핑으로 변경할 수 있습니까?"- 수천 명의 C++ 프로그래머가 90 년대 후반에 말한 구. –

+0

OmniORB에 대한 세부 사항을 모르지만 TAO (http://download.dre.vanderbilt.edu 참조)는 IDL char에 C++ char 유형을 사용합니다. IDL 매핑 변경에 대해 사람들이 오랫동안 이야기해온 매핑을 실현하는 새로운 IDL 대 C++ 11 언어 매핑을 살펴보십시오 (http://www.omg.org/spec/CPP11/ 참조) 우리는 이것을 TAOX11의 일부로 구현합니다 (http://swsupport.remedy.nl 참조). –

답변

3

그것은 정의 구현 (page 15 in the spec) 어떤 IDL 유형 boolean, charoctet지도한다.

omniORB chooses to

: 나는 그 좋은 생각이 될 것입니다 의심하지만

... 
typedef unsigned char _CORBA_Char; 
typedef unsigned char _CORBA_Octet; 
... 

당신은 omniORB의 소스를 변경할 수 있습니다. 또는 CORBA::Char이 C++ char 유형을 나타내지 않는다는 것을 인정할 수 있습니다.

1

직접 CORBA 호출이고 해당 함수의 반환 값을 할당하는 함수를 호출 할 때는 CORBA::Char을 사용할 것을 권장합니다.

'char'또는 'unsigned char'로 /에서 변환해야하는 경우 static_cast이 작업을 수행해야합니다.