C++ IDISP补丁:不可能发布

C++ IDISP补丁:不可能发布,c++,mingw,C++,Mingw,我正在尝试将一个程序迁移到另一个mingw版本,以便在另一台32位计算机上编译。此程序使用IDispatch接口,在我的计算机上编译良好,但在尝试使用orther mingw版本时,我遇到以下错误: “struct IDispatch”没有名为“Release”的成员 这非常复杂,因为IDispatch实现了IUknown,其中包含此方法 有没有我错过的编译选项 这是我的代码的一部分,实际上是代码使用的disphelper项目的一部分: class CDhComPtr { public: CDh

我正在尝试将一个程序迁移到另一个mingw版本,以便在另一台32位计算机上编译。此程序使用IDispatch接口,在我的计算机上编译良好,但在尝试使用orther 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;

我们需要看到您的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