|
Программирование >> Перегруженные имена функций и идентификаторы
library SAMPLLib importlib( stdole32.tlb ); importlib( stdole2.tlb ); typedef enum { SamplTypel = 1, SamplType2 = 2 } SamplType; object, uuid(37A3AD1D-F9CC-11D3-8D3C-0000E8D9FD76), dual, helpstring( ISamplObject Interface ), pointer default(unique) interface ISamplObject : IDispatch [propget, id(1)] HRESULT Prop([out, retval] SamplType *pVal); [propput, id(1)] HRESULT Prop([in] SamplType newVal); [id(2)] HRESULT Method([in] VARIANT Var,[in] BSTR Str,[out, retval] ISamplObject** Obj); uuid(37A3AD1E-F9CC-11D3-8D3C-0000E8D9FD76), helpstring( SamplObject Class ) coclass SamplObject [default] interface ISamplObject; После подключения соответствующей библиотеки типов с помощью директивы #import будут созданы два файла, которые генерируются в втходном каталоге проекта. Это фай sampl.tlh, содержащий описание классов, и файл sampl.tli, который содержит реализацию членов классов. Эти файлы будут включены в проект автоматически. Ниже приведено содержимое этих файлов. #pragma once #pragma pack(push, 8) #include <comdef.h> namespace SAMPLLib { Forward references and typedefs struct declspec (uuid( 37a3ad1d-f9cc-11d3-8d3c-0000e8d9fd76 )) /* dual interface */ ISamplObject; struct /* coclass */ SamplObject; Smart pointer typedef declarations COM SMARTPTR TYPEDEF (ISamplObject, uuidof(ISamplObject)); Type library items enum SamplType SamplType1 = 1, SamplType2 = 2 struct declspec(uuid( 37a3ad1d-f9cc-11d3-8d3c- 0000e8d9fd76 )) ISamplObject : IDispatch Property data declspec(property(get=GetProp,put=PutProp)) enum SamplType Prop; Wrapper methods for error-handling enum SamplType GetProp ( ); void PutProp (enum SamplType pVal ); ISamplObjectPtr Method (const variant t & Var, bstr t Str ); Raw methods provided by interface virtual HRESULT stdcall get Prop (enum SamplType * pVal) = 0 ; virtual HRESULT stdcall put Prop (enum SamplType pVal) = 0 ; virtual HRESULT stdcall raw Method (VARIANT Var,BSTR Str,struct ISamplObject** Obj) = 0 ; }; struct declspec(uuid( 37a3ad1e-f9cc-11d3-8d3c- 0000e8d9fd76 )) SamplObject; #include debug\sampl.tli } namespace SAMPLLib #pragma pack(pop) #pragma once interface ISamplObject wrapper method implementations inline enum SamplType ISamplObject::GetProp ( ) { enum SamplType result; HRESULT hr = get Prop(& result); if (FAILED( hr)) com issue errorex( hr, this, uuid- of(this)); return result; inline void ISamplObject::PutProp ( enum SamplType pVal ) { HRESULT hr = put Prop(pVal); if (FAILED( hr)) com issue errorex( hr, this, uuid- of(this)); } inline ISamplObjectPtr ISamplObject::Method ( const vari-ant t & Var, bstr t Str ) { struct ISamplObject * result; HRESULT hr = raw Method(Var, Str, & result); if (FAILED( hr)) com issue errorex( hr, this, uuid- of(this)); return ISamplObjectPtr( result, false);
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |