C++ 如何在c++;具有多个接口的COM
我有3个接口:IGetInformation、IAccount、ICreateATM,它们继承IDispatch。我还有继承这3个接口的CoATM类 我应该如何实现IDispatch以使我的所有接口正常工作? 我有这个实现,只有IGetInformation在工作:C++ 如何在c++;具有多个接口的COM,c++,com,idispatch,C++,Com,Idispatch,我有3个接口:IGetInformation、IAccount、ICreateATM,它们继承IDispatch。我还有继承这3个接口的CoATM类 我应该如何实现IDispatch以使我的所有接口正常工作? 我有这个实现,只有IGetInformation在工作: STDMETHODIMP CoATM::GetTypeInfoCount(UINT* pctinfo) { *pctinfo = 1; return S_OK; } STDMETHODIMP CoATM::GetTy
STDMETHODIMP CoATM::GetTypeInfoCount(UINT* pctinfo)
{
*pctinfo = 1;
return S_OK;
}
STDMETHODIMP CoATM::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo)
{
HRESULT hr;
*ppTInfo = 0;
if (iTInfo)
return DISP_E_BADINDEX;
if (m_pTypeInfo)
{
m_pTypeInfo->AddRef();
hr = S_OK;
}
else
hr = LoadMyTypeInfo();
if (SUCCEEDED(hr))
*ppTInfo = m_pTypeInfo;
return hr;
}
STDMETHODIMP CoATM::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId)
{
if (!m_pTypeInfo)
{
HRESULT hr;
if (FAILED(hr = LoadMyTypeInfo()))
return hr;
}
return DispGetIDsOfNames(m_pTypeInfo, rgszNames, cNames, rgDispId);
}
STDMETHODIMP CoATM::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
{
if (!IsEqualIID(riid, IID_NULL))
return DISP_E_UNKNOWNINTERFACE;
if (!m_pTypeInfo)
{
HRESULT hr;
if (FAILED(hr = LoadMyTypeInfo()))
return hr;
}
return DispInvoke(this, m_pTypeInfo, dispIdMember, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
HRESULT CoATM::LoadMyTypeInfo(void)
{
HRESULT hr;
LPTYPELIB pTypeLib;
if (SUCCEEDED(hr = LoadRegTypeLib(CLSID_ATMTypeLib, 1, 0, 0, &pTypeLib)))
{
if (SUCCEEDED(hr = pTypeLib->GetTypeInfoOfGuid(IID_IGetInformation, &m_pTypeInfo)))
{
pTypeLib->Release();
m_pTypeInfo->AddRef();
}
else if (SUCCEEDED(hr = pTypeLib->GetTypeInfoOfGuid(IID_IAccount, &m_pTypeInfo)))
{
pTypeLib->Release();
m_pTypeInfo->AddRef();
}
else if (SUCCEEDED(hr = pTypeLib->GetTypeInfoOfGuid(IID_ICreateATM, &m_pTypeInfo)))
{
pTypeLib->Release();
m_pTypeInfo->AddRef();
}
}
return hr;
}
我想我只有IGetInformation在工作,因为我首先在LoadMyTypeInfo()中获得它。但我不知道如何获取所有接口。您是否尝试过将MSVC作为COM项目来构建您的项目?它会自动完成很多这方面的工作。如果你想自己做,也许你可以用MSVC试试,看看它能产生什么。然后再画你的图案。(虽然使用MSVC中的工具来做这些事情通常要简单得多)好的,谢谢你的建议。