14 class MyDispatch : public T, public IDispatch
17 MyDispatch(INTERFACEDATA* idata, void* pThis)
18 : m_cRef(0), m_pTypeInfo(nullptr)
20 ITypeInfo* pTypeInfo = nullptr;
21 if (SUCCEEDED(CreateDispTypeInfo(idata, LOCALE_SYSTEM_DEFAULT, &pTypeInfo)))
22 m_pTypeInfo = pTypeInfo;
28 m_pTypeInfo->Release();
31 MyDispatch(const MyDispatch&) = delete;
32 MyDispatch& operator=(const MyDispatch&) = delete;
34 HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject) override
39 ULONG STDMETHODCALLTYPE AddRef(void) override
41 return InterlockedIncrement(&m_cRef);
44 ULONG STDMETHODCALLTYPE Release(void) override
46 ULONG cRef = InterlockedDecrement(&m_cRef);
52 HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT* pctinfo) override
58 HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo) override
60 ppTInfo = &m_pTypeInfo;
64 HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId) override
66 return m_pTypeInfo->GetIDsOfNames(rgszNames, cNames, rgDispId);
69 HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) override
71 return m_pTypeInfo->Invoke(this, dispIdMember, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
75 ITypeInfo* m_pTypeInfo;
78 struct IMergeApp : public IUnknown
80 virtual BSTR STDMETHODCALLTYPE Translate(BSTR text) = 0;
81 virtual VARIANT STDMETHODCALLTYPE GetOption(BSTR name, const VARIANT& varDefault) = 0;
82 virtual void STDMETHODCALLTYPE SaveOption(BSTR name, const VARIANT& varValue) = 0;
85 class MergeAppCOMClass : public MyDispatch<IMergeApp>
89 MergeAppCOMClass(const MergeAppCOMClass&) = delete;
90 virtual ~MergeAppCOMClass();
91 MergeAppCOMClass& operator=(const MergeAppCOMClass&) = delete;
93 BSTR STDMETHODCALLTYPE Translate(BSTR text) override;
94 VARIANT STDMETHODCALLTYPE GetOption(BSTR name, const VARIANT& varDefault) override;
95 void STDMETHODCALLTYPE SaveOption(BSTR name, const VARIANT& varValue) override;