读书人

怎么将一个C++类转换成Delphi代码

发布时间: 2012-04-13 13:50:24 作者: rapoo

求助:如何将一个C++类转换成Delphi代码
同标题,该类是DirectShow中的一个示例,求如何将其转化成Delphi代码,万分感谢!!

C/C++ code
// 类声明class CErrReporter : public IAMErrorLog{protected:    long    m_lRef; // Reference count.public:    CErrReporter() { m_lRef = 0; }    // IUnknown    STDMETHOD(QueryInterface(REFIID, void**));    STDMETHOD_(ULONG, AddRef());    STDMETHOD_(ULONG, Release());    // IAMErrorLog    STDMETHOD(LogError(LONG, BSTR, LONG, HRESULT, VARIANT*));};// 部分实现STDMETHODIMP CErrReporter::QueryInterface(REFIID riid, void **ppv){    if (ppv == NULL) return E_POINTER;    *ppv = NULL;    if (riid == IID_IUnknown)        *ppv = static_cast<IUnknown*>(this);    else if (riid == IID_IAMErrorLog)        *ppv = static_cast<IAMErrorLog*>(this);            else     return E_NOINTERFACE;    AddRef();    return S_OK;}STDMETHODIMP_(ULONG) CErrReporter::AddRef(){    return InterlockedIncrement(&m_lRef);}STDMETHODIMP_(ULONG) CErrReporter::Release(){    // Store the decremented count in a temporary    // variable.     ULONG uCount = InterlockedDecrement(&m_lRef);    if (uCount == 0)    {        delete this;    }    // Return the temporary variable, not the member    // variable, for thread safety.    return uCount;}


[解决办法]
那你直接按下面的定义实现LogError方法就可以了,其它的TInterfacedObject已经实现了,不用再写了:

TErrReporter = class(TInterfacedObject, IAMErrorLog)
public
function LogError(Severity: longint; const pErrorString: WideString;
ErrorCode: longint; HResult: longint; var pExtraInfo: OleVariant): HResult; stdcall;

end;


[解决办法]
学习

读书人网 >.NET

热点推荐