IDL - . IDL , . IDL interface. : , , . :
[ attribute1, attribute2, ...] interface IThisInterface : IBaseInterface { typedef1; typedef2; : : method1; method2; }
IDL. [object] , -, DCE- . ( IDL- IThisInterface ).
, - , , . , . , , , , , , - . , , , : ICalculator.
- , , . , ICalculator, "ICalculator", . , ICalculator, , , , . , , .
, - , . (Globally Unique Identifiers GUIDs), squids1. GUID , . GUID 128- , , . GUID (Universally Unique Identifiers UUIDs), DCE RPC. GUID - (Interface IDs IIDs). GUID, GUID (Class IDs CLSIDs). , GUID :
BDA4A270-A1BA-11d0-8C2C-0080C73925BA
32 128- GUID. GUID .
GUID API- , 128- , :
HRESULT CoCreateGuid(GUID *pguid);
, CoCreateGuid, , ( , ). , CoCreateGuid HRESULT, , . CoCreateGuid , , SDK GUIDGEN.EXE. . 2.3 GUIDGEN. GUIDGEN CoCreateGuid GUID , C++ IDL. IDL ( ).
IDL, [uuid]. [uuid] GUID:
[object, uuid(BDA4A270-A1BA-11dO-8C2C-0080C73925BA)] interface ICalculator : IBaseInterface { HRESULT Clear(void); HRESULT Add([in] long n); HRESULT Sum([out, retval] long *pn); }
C++ IID , IID_. , ICalculator IID, , IDL IID_ICalculator. C++.
C++ 128- , - 128- GUID IID CLSID :
typedef struct _GUID { DWORD Data1; WORD Data2; WORD Data3; BYTE Data4[8]; } GUID; typedef GUID IID; typedef GUID CLSID;
GUID , , GUID, . GUID (constant reference aliases) GUID:
#define REFGUID const GUID& #define REFIID const IID& #define REFCLSID const CLSID&
GUID, == != GUID:
inline BOOL IsEqualGUID(REFGUID r1, REFGUID r2) { return !memcmp(&r1, &r2, sizeof(GUID)); } #def1ne IsEqualIID(r1, r2) IsEqualGUID((r1) , (r2)) #define IsEqualCLSID(r1, r2) IsEqualGUID((r1), (r2)) inline BOOL operator == (REFGUID r1, REFGUID r2) { return !memcmp(&r1, &r2, sizeof(GUID)); } inline BOOL operator != (REFGUID r1, REFGUID r2) { return !(r1 == r2); }
SDK , , .
, GUID, ; , Dynamic_Cast, , . , I tensibleObject IUnknown, .
1 GUID . , GUID fluid ( ), squid ( ), , , languid ( )