C ++ IDispatch:无法发布

时间:2015-05-28 10:32:57

标签: c++ mingw

我正在尝试将程序迁移到另一个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

0 个答案:

没有答案