Note: the version of CORBA used for this comparison is omniORB.
COM | CORBA |
Interface names conventionally start with an I. interface IFred { }; |
Interface names do not start with I. interface Fred { }; |
Compile IDL files with "MIDL" compiler,
generates: Fred.h Fred_i.c Fred_p.c |
Compile IDL files with "omniidl" compiler,
generates: Fred.hh FredSK.cc |
An object can have (be derived from) several interfaces. Each interface is typically derived from IUnknown. | An object can have (be derived from) only one interface, typically derived (using multiple inheritance) from several interfaces. Each interface is derived from CORBA::Object. |
"Server object" implementation: class CObj : public IOne, public ITwo ... |
"Servant object" implementation: class CObj : public POA_Fred ... where POA_Fred is the "skeleton class" generated by the IDL compiler for the interface Fred. |
"Interface pointer": IFred* |
"Object reference": Fred_ptr |
"Smart pointer" provided by ATL (automatic
release) CComPtr<IFred> |
"Object reference variable" (automatic
release): Fred_var |
To initialise an interface pointer to null: IFred* pFred = NULL; |
To initialise an object reference to null: Fred_ptr pFred = Fred::_nil(); |
To test for a null interface pointer: if (pFred == NULL) ... |
To test for a null object reference: if (CORBA::is_nil(pFred)) ... |
To obtain another interface on the same
object: pOne->QueryInterface(IID_ITwo, &pTwo); |
To obtain another interface on the same object: pTwo = Fred::_narrow(pOne); |
To release an interface
pointer: pFred->Release(); |
To release an object
reference: CORBA::release(pFred); |
To test whether two interface pointers refer to the same
object: pOne->QueryInterface(IID_IUnknown, &punkOne); pTwo->QueryInterface(IID_IUnknown, &punkTwo); if (punkOne == punkTwo) ... |
To test whether two object references refer to the same
object: if (pOne->_is_equivalent(punkTwo)) ... |