Essential COM

, , . C++ ( C++), ( Java Visual Basic). , , , - . , . , HTML ( , Visual Basic Script, JavaScript), Web- Web- . HTML, " ", HTML. - , - HTML- ( , - , Web- ). (runtime engine) . , .

Visual Basic Script JavaScript, , . IDispatch :

 [object, uuid(00020400-0000-0000-C000-000000000046)] interface IDispatch : IUnknown {     // structure to model a list of named parameters     //              typedef struct tagDISPPARAMS {       [size_is(cArgs)] VARIANTARG * rgvarg;       [size_is(cNamedArgs)] DISPID * rgdispidNamedArgs;       UINT cArgs;       UINT cNamedArgs;   } DISPPARAMS;     // can the object describe this interface?     //            ?   HRESULT GetTypeInfoCount([out] UINT * pctinfo);     // return a locale-specific description of this interface     //                  HRESULT GetTypeInfo(             [in] UINT itInfo, // reserved, m.b.z.                               //  ,                  [in] LCID lcid,   // locale ID                               //                [out] ITypeInfo ** ppTInfo); // put it here!                                          //      !     // resolve member/parameter names to DISPIDs     //      /    DISPID   HRESULT GetIDsOfNames(             [in] REFIID riid, // reserved, must be IID_NULL                               //  ,     IID_NULL             [in, size_is(cNames)] LPOLESTR * rgszNames, // method+params                                                         //   +              [in] UINT cNames, // count of names                               //                [in] LCID lcid,   // locale ID                               //   ID             [out, size_is(cNames)] DISPID * rgid // tokens of names                                                  //      );     // access member via its DISPID     //           DISPID   HRESULT Invoke(             [in] DISPID id, // token of member                             //                [in] REFIID riid, // reserved, must be IID_NULL                               //  ,     IID_NULL             [in] LCID lcid, // locale ID                             //   ID             [in] WORD wFlags, // method, propput, or propget?                               //   propput   propget?             [in,out] DISPPARAMS * pDispParams, // logical parameters                                                //                [out] VARIANT * pVarResult, // logical result                                         //                [out] EXCEPINFO * pExcepInfo, // IErrorInfo params                                           //   IErrorInfo             [out] UINT * puArgErr         // used for type errors                                           //          ); 

, QueryInterface IDispatch . QueryInterface, . IDispatch , GetIDsOfNames . DISPID (parsed) , . / IDispatch::Invoke . , IDispatch::Invoke VARIANT DISPPARAMS, VARIANT.

IDispatch ( dispinterface , ) . . , . . , . , , , . , ( ).

IDL dispinterface:

 [uuid(75DA6450-DD0F-11d0-8C58-0880C73925BA)] dispinterface DPrimeManager { properties:   [id(1), readonly] long MinPrimeOnMachine;   [id(2)] long MinPrime; methods:   [id(3)] long GetNextPrime([in] long n); } 

; , IDispatch. , . , , , , (dual interface).

, IDispatch. IDispatch , . , . IDL- DPrimeManager:

 [object, dual, uuid(75DA6450-DD0F-11d0-8C58-0080C73925BA)] interface DIPrimeManager : IDispatch {   [id(1), propget] HRESULT MinPrimeOnMachine(                               [out, retval] long *pval);   [id(2), propput] HRESULT MinPrime([in] longval);   [id(2), propget] HRESULT MinPrime([out, retval] long *pval);   [id(3)] long GetNextPrime([in] long n); } 

, IDispatch, IUnknown. , [dual]. , , . [dual] [oleautomation] RegisterTypeLib.

, IDispatch . , IDispatch. , :

 class PrimeManager : DIPrimeManager {     LONG m_cRef;  //   reference count                   //          ITypeInfo *m_pTypeInfo; // ptr. to type desc.                             //              // IUnknown methods...       //   IUnknown...         // IDispatch methods...       //   IDispatch...         // IPrimeManager methods...       //   IPrimeManager...     PrimeManager(void) : m_cRef(0) {         ITypeLib *ptl = 0;         HRESULT hr = LoadRegTypeLib(LIBID_PrimeLib, 1, 0, 0, &ptl);         assert(SUCCEEDED(hr));         hr = ptl->GetTypeInfoOfGuid(IID_DIPrimeManager, &m_pTypeInfo);         ptl->Release();     }     virtual PrimeManager(void) { m_pTypeInfo->Release(); } }; 

, GetTypeInfo :

 STDMETHODIMP PrimeManager::GetTypeInfo (UINT it, LCID lcid, ITypeInfo **ppti) {   assert(it == 0 && ppti != 0);   (*ppti = m_pTypeInfo)->AddRef();   return S_OK; } 

, LCID, , . GetTypeInfoCount :

 STDMETHODIMP PrimeManager::GetTypeInfoCount(UINT *pit) {     assert(pit != 0);     *pit = 1;       // only 0 or 1 are allowed       //     0   1     return S_OK; } 

( , ) ( , ). , .

GetTypeInfo GetTypeInfoCount . IDispatch GetIDsOfNames Invoke. GetIDsOfNames , :

 STDMETHODIMP PrimeManager::GetIDsOfNames(REFIID riid, OLECHAR **pNames,                                UINT cNames, LCID lcid, DISPID *pdispids) {     assert(riid == IID_NULL);     return m_pTypeInfo->GetIDsOfNames(pNames, cNames, pdispids); } 

DISPID, . Invoke :

 STDMETHODIMP PrimeManager::Invoke(DISPID id,                                    REFIID riid,                                   LCID lcid,                                   WORD wFlags,                                   DISPPARAMS *pd,                                   VARIANT *pVarResult,                                   EXCEPINFO *pe,                                   UINT *pu) {     assert(riid == IID_NULL);     void *pvThis = static_cast<DIPrimeManager*>(this);     return m_pTypeInfo->Invoke(pvThis, id, wFlags,                                   pd, pVarResult, pe, pu); } 

 . 7.6.

ITypeInfo::Invoke . , , . (call stack), . . 7.6 , .



Suschnost' tehnologii SOM
Essential COM
ISBN: 0201634465
EAN: 2147483647
Year: N/A
Pages: 103
Authors: Don Box

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net