��������½ڣ����ǿ����� IDL ����������������������κ����Է������ǡ�IDL ��װ�����еĶ���һ������������Ϣ�������κ����Զ����Խ�����Щ����ı�ʾ(representation)���ض���һ���������ǡ����ر�ʾ�� CORBA �����ɱ��ض������һ������ӳ�䡣
һЩ����ӳ���� CORBA ����һ���֡��ִ��ӳ����C��C++,��Java��Smalltalk �� COBOL��C++ �� Java ӳ�����ڽ̳̺�ʵ��������ġ�C ӳ��û�б��㷺��ʹ�ú����漰 CORBA �����н�˵��GNOME ������ȫ�� C ����д�ɡ�����ζ�����ǽ�ֻ�� C ӳ�䡣
ORBit ��һ�� idl �����������Զ������� C ͷ�ļ�������������Ӧ�ڶ���� IDL ����ĺ���(�����ӱ���ӳ��)���÷��� orbit-idl file.idl���������һ�� apple.idl �ļ������� idl ������������ apple.h�����ͷ�ļ��������к�����/�����͵���Ӧ�� C ӳ���������������� apple-common.c�� apple-stub.c �� apple-skels.c����Щ�ļ�������벢��ͻ��ͷ��������ӣ������ṩȱʡ�� stub �� skeleton��
�� C ������û�С���ʵ���Ķ��� C ӳ��ʹ�õĹ��������� GTK+��GNOME �� Motif������Щ�ط� C �����Ϊ����Ļ��������������Ҫ�Ĺ���
����ķ��������DZ���ȫ���Ƶġ����磺Fruits Basket ģ��� Apple ����� Basketeat_me ������ C ������ FruitsBasket_Apple_eat_me��IDL ��������ʹ�����»���('_')�ķ��������֣�����ʹ�ô�Сд��ϡ��������� EatMe ������ eat_me���������Ǿ����� FruitsBasket_Apple_EatMe�������ַ�ʽ���DZ��������ֳ�ͻ(���磺FruitsBasket::Apple_eat::me �� FruitsBasket::Apple::eat_me)������ģ��/�ӿ�/����������ʶ��Ȼ����ע������������Ǻ��ϸ�������������
�ٸ����ӣ����ǵ� Apple �ӿڽ�ת�������� C ������
module FruitsBasket { interface Apple { void eat_me (in boolean eat_yes_or_not ); }; }; |
��ӳ��� :
typedef CORBA_Object FruitsBasket_Apple; void FruitsBasket_Apple_eat_me (Fruits_Apple object, CORBA_boolean eat_yes_or_not, CORBA_Environment *ev); |
���з����ĵ�����Ҫһ������������Ϊ��һ��������һ�� CORBA_Environment ��Ϊ���һ������������������ CORBA_Object ���͵ģ���������Dz���������(���磺�㲻��ֱ�ӵķ��������κ��ֶλ��κζ���)����ʵ�ϣ�CORBA_Object ������һ��ָ�룬ָ����������ʹ�õ� COBRA ʵ�ֵ�һ���ṹ��
�����ض��IJ���(argument��ʵ�ʲ���)���� CORBA_Object �� the CORBA_Environment ����(parameter����ʽ����)֮�䴫�ݡ������ض��IJ�������� out �� inout ������Ӧ�ô���ָ�롣��� in �����ǽṹ���ַ�������������봫��ָ��(һ�������л��ַ����ĵ�һ��Ԫ�ص�ָ��)�����ز�����ʹ����ͬ���ϸ�ģ����ڽṹ�����ϡ��ַ��������к�����ʹ��ָ�롣�� CORBA �淶���и���ϸ��������
���Ե�ӳ��������ģ����������õ� OOP ʵ������������Բ�����ֱ�ӷ��ʣ�����������������_get ������ _set ���������磬���е����������ϸ�ȼۣ�
module FruitsBasket { interface Apple { attribute boolean is_eaten; }; }; // ����Ķ����������ϵȼ��ڵ�һ�����嵫ȴ�ǷǷ��� // IDL ��ֹʹ�����»��߿�ͷ������ module FruitsBasket { interface Apple { boolean _get_is_eaten (void); void _set_is_eaten ( in boolean b ); }; }; |
��Ϊ���������Ĵ��뽫��������ʽӿڵ� is_eaten ���ԡ�
��
CORBA_Object app; CORBA_Environment *ev; CORBA_boolean bool; /* �����ǰ� app ���ӵ��������еķ����������һЩ���� */ /* ��ע��˫�»��ߡ�һ��Դ����ȫ����������֣� * ��һ��Դ�ڷ��������� */ FruitsBasket_Apple__set_is_eaten (app, TRUE, ev); bool = FruitsBasket_Apple__get_is_eaten (app, ev); |
�� const �ؼ��ֶ���ij���ӳ��� #define��
const long myconstant = 43; |
��ӳ���:
#define my_constant 43 |
������ CORBA ����ӳ�������±���
�� 1-2. ���� CORBA ���͵� C ӳ��
IDL ���� | C ����ӳ�� |
---|---|
short | CORBA_short |
unsigned short | CORBA_unsigned_short |
long | CORBA_long |
unsigned long | CORBA_unsigned_long |
long long | CORBA_long_long |
unsigned long long | CORBA_unsigned_long_long |
float | CORBA_float |
double | CORBA_double |
long double | CORBA_long_double |
boolean | CORBA_boolean |
char | CORBA_char |
wchar | CORBA_wchar |
CORBA_boolean ��ӳ��� C �� unsigned char ����ö�ٱ�ӳ��� #define��
������������(�ṹ�����С��ַ��������ַ���)�DZ䳤���ͱ�����������һ������������Щ�䳤���ͣ������߱���ʹ�� CORBA_free() �ͷ�Ϊ֮������ڴ棬������������ͷ���Щ�ڴ档
�ṹֱ��ӳ��Ϊ C �Ľṹ��
�����ӳ�����е�����:
sequence <char,10> my_var; |
��ӳ��ɣ�
typedef struct { CORBA_unsigned_long _maximum; CORBA_unsigned_long _lenght; CORBA_char *_buffer; } CORBA_sequence_char; typedef CORBA_sequence_char my_var |
CORBA_sequence_char ��� C �ṹ������˵���ģ�_maximum ��������������Ԫ����Ŀ�� _lenght ��Ԫ�ص���Ч��Ŀ��_buffer �ǵ��������ݵ� C ���е�ָ�롣
�����������ӵ��ǣ�CORBA_sequence_anytype������� anytype �����б�ָ�������͡�
����������һ���ṹ��Ϊһ�� in ������ʱ��������չܸ�ÿ���ֶ������ʵ���ֵ��ȷ��������ʵ����ڴ���䡣�����Ϊһ�� out ��������ֻ��Ҫ�չ��� CORBA_free ��ȥ���乤����deallocation���ͷ�������������Ϊ inout �����������ȷ�� _maximum, _lenght �� _buffer ����ȷ��������(���� in ��������)�������ص�ʱ��_lenght �����з��ص�Ԫ�صĸ������� _buffer ���ڴ�Ҫ�� CORBA_free ���ͷš����� _buffer ���ڴ�Ҫ�� CORBA_sequence_*_allocbuf �����䣬�����Ļ�����������ڴ��ǿ��Ըı�ġ��������������룺
// ��������������ʵĽӿ�: module my { interface seq { void SetThing ( in sequence <long long, 20> ); void GetThing ( out sequence <long long, 20> ); void SendReceiveThing ( inout sequence <long long, 20> ); }; }; |
/* �����ǵ��ò�ͬ������ C ���� */ CORBA_Object obj; CORBA_Environment ev; CORBA_sequence_long_long *seq_one; CORBA_sequence_long_long seq; /* ������ʵ�Ķ���������Ĵ��� */ my_seq_GetThing (obj, seq_one, &ev); /* ������, seq_one ����ȷ�ĸ�ֵ */ /* ȥ��Ϊ��ʱ�洢�������ж�������ڴ� */ CORBA_free (seq_one); seq._maximum = 20; seq._lenght = 2; seq._buffer = CORBA_sequence_long_long_allocbuf (2); seq._buffer = { 1, 1 }; my_seq_SetThing (obj, &seq, &ev); my_seq_SendReceiveThing (obj, &seq, &ev); /* ������, _buffer �������κζ���: �����ڴ���Բ������Ƿ���� * ��Ϊ�����߽� CORBA_free ���ǵ� _buffer * ���������С�����Ļ������·���һ���µĻ����� */ CORBA_free (seq._buffer); |
Ҫ�ö���������ι����ĸ��õ����⣬��Ӧ�ö� CORBA ���������ܷ�����Ȥ�IJ���(������û���κ������������ļ�����Ҫ��)�����ڵڶ��������ĵ�ʱ��Ӧ��������
�ַ�������Ӱ��� CORBA_char ���У���Ӧ���� CORBA_string_allocate �����䡣���ǵ�ʹ�����������С�������һ�����Ӵ��룺
// ��������������ʵĽӿ�: module my { interface str { void SetThing ( in string my_str ); void GetThing ( out string my_str ); void SendReceiveThing ( inout string my_str ); }; }; |
/* �����ǵ��ò�ͬ������ C ���� */ CORBA_Object obj; CORBA_Environment ev; CORBA_char *str; /* ������ʵ�Ķ���������Ĵ��� */ my_str_GetThing (obj, &str, &ev); /* ������, str ����ȷ�ĸ�ֵ */ /* ȥ��Ϊ��ʱ�洢�������ж�������ڴ� */ CORBA_free (str); str = CORBA_string_alloc (5); my_str_SetThing (obj, str, &ev); my_str_SendReceiveThing (obj, &str, &ev); /* ������, str �������κζ���: �����ڴ���Բ������Ƿ���� * ��Ϊ�����߽� CORBA_free ���ǵ� str * ���������С�����Ļ������·���һ���µĻ����� */ CORBA_free (str); |
Ϊ�˸��õ��������ǵ�ʹ�ú�Э������/ȥ������̣���ο� CORBA �����������/��һ���������ݻ����ַ���ʱ�����ˡ���ֵġ����飬��Ӧ������ض���Щ���ϡ�ע�����ӿ�������Ҫʵ��ʹ�õĴ���ļ�(���磺����û�������)��
�� C �����е�����������Ժ��˵����Ϊ C û���� C++ �� Java ���������õĴ�������Ļ��ơ�