我正在尝试将程序迁移到另一个mingw版本,以便在另一台32位计算机上进行编译。这个程序使用IDispatch接口,并在我的计算机上编译很好,但是当尝试使用其他mingw版本时,我收到此错误:
'struct IDispatch'没有名为'Release'的成员
哪个非常奇怪,因为IDispatch实现了具有此方法的IUknown。
我有错过的编辑选项吗?
以下是我的代码的一部分(实际上,代码使用的disphelper项目的一部分):
class CDhComPtr
{
public:
CDhComPtr() throw() : m_pInterface (NULL) {}
CDhComPtr(T* pInterface) throw() : m_pInterface (pInterface)
{
if (m_pInterface) m_pInterface->AddRef();
}
CDhComPtr(const CDhComPtr& original) throw() : m_pInterface (original.m_pInterface)
{
if (m_pInterface) m_pInterface->AddRef();
}
~CDhComPtr() throw()
{
Dispose();
}
void Dispose() throw()
{
if (m_pInterface)
{
m_pInterface->Release();
m_pInterface = NULL;
}
}
T* Detach() throw()
{
T* temp = m_pInterface;
m_pInterface = NULL;
return temp;
}
T** operator&() throw()
{
Dispose();
return &m_pInterface;
}
CDhComPtr& operator=(T* pInterface) throw()
{
if (m_pInterface != pInterface)
{
T* pOldInterface = m_pInterface;
m_pInterface = pInterface;
if (m_pInterface) m_pInterface->AddRef();
if (pOldInterface) pOldInterface->Release();
}
return *this;
}
private:
T* m_pInterface;
};
typedef CDhComPtr<IDispatch> CDispPtr;
typedef CDhComPtr<IEnumVARIANT> CEnumPtr;
typedef CDhComPtr<IUnknown> CUnknownPtr;
对不起,如果我的英语不好,我来自法国。
这个版本的Mingw实现了IDispatch,如下所示:
#define INTERFACE IDispatch
DECLARE_INTERFACE_(IDispatch,IUnknown)
{
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*)PURE;
STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,UINT*) PURE;
};
#undef INTERFACE