Essential COM

IDL

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 ( )

Категории