首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-04-13 
求助:如何将一个C++类转换成Delphi代码同标题,该类是DirectShow中的一个示例,求如何将其转化成Delphi代码,

求助:如何将一个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; 


[解决办法]
学习

热点排行