C++ IDISP补丁:不可能发布
我正在尝试将一个程序迁移到另一个mingw版本,以便在另一台32位计算机上编译。此程序使用IDispatch接口,在我的计算机上编译良好,但在尝试使用orther mingw版本时,我遇到以下错误: “struct IDispatch”没有名为“Release”的成员 这非常复杂,因为IDispatch实现了IUknown,其中包含此方法 有没有我错过的编译选项 这是我的代码的一部分,实际上是代码使用的disphelper项目的一部分:C++ IDISP补丁:不可能发布,c++,mingw,C++,Mingw,我正在尝试将一个程序迁移到另一个mingw版本,以便在另一台32位计算机上编译。此程序使用IDispatch接口,在我的计算机上编译良好,但在尝试使用orther mingw版本时,我遇到以下错误: “struct IDispatch”没有名为“Release”的成员 这非常复杂,因为IDispatch实现了IUknown,其中包含此方法 有没有我错过的编译选项 这是我的代码的一部分,实际上是代码使用的disphelper项目的一部分: class CDhComPtr { public: CDh
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;
我们需要看到您的IDispatch和IUnknownIDispatch声明在这个版本的Mingw中实现,所以我无法更改它的实现,我没有权限。在第一篇文章中添加
#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