同标题,该类是DirectShow中的一个示例,求如何将其转化成Delphi代码,万分感谢!!
// 类声明
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;
}
// 类声明
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;
}
解决方案 »
- 请教统计的问题
- TreeView的一个图片问题 简单!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 好奇怪,为什么解密后的字符串是一样的,但就是执行Connection打开操作时出错?(高手帮忙)
- 关于把数据库中的表导出/导入为XML文件
- 想用Indy IdHttp做一个自动登陆邮箱并发邮件的程序,要登陆的网站是SSL的,请大家来讨论?
- 我再散
- 使用Dephi如何读取Excel表中的数据?(急!!!在线等!100分!)
- 关于ComBox问题!
- 在学DELPHI之前应该看看什么书???(感谢各位大虾指导)
- 气死人了,调用一个简单的存储过程都出错!!!
- 关于sleep函数的问题!
- 谁能帮我改一下气泡提示的问题?
2、没看见STDMETHOD(LogError(LONG, BSTR, LONG, HRESULT, VARIANT*))方法的c++实现代码,怎么写?
至于Delphi类可以是下面的说明:type
TErrReporter = class(TInterfacedObject, IAMErrorLog)
public
function LogError(p1: LongInt; p2: PChar; p3: LongInt,
hRes: HResult, var v: Variant): Integer; stdcall;
end;
type
TErrReporter = class(TInterfacedObject, IAMErrorLog)
public
function LogError(p1: LongInt; p2: PChar; p3: LongInt;
hRes: HResult; var v: Variant): Integer; stdcall;
end;
{
public:
virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE LogError(
long Severity,
BSTR pErrorString,
long ErrorCode,
long hresult,
/* [in] */ VARIANT *pExtraInfo) = 0;
};
IAMErrorLog 的Delphi实现 IAMErrorLog = interface(IUnknown)
['{E43E73A2-0EFA-11D3-9601-00A0C9441E20}']
(*** IAMErrorLog methods ***)
function LogError(Severity: longint; const pErrorString: WideString; ErrorCode: longint;
HResult: longint; var pExtraInfo: OleVariant): HResult; stdcall;
end;
IAMErrorLog : public IUnknown
{
public:
virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE LogError(
long Severity,
BSTR pErrorString,
long ErrorCode,
long hresult,
/* [in] */ VARIANT *pExtraInfo) = 0;
};
TErrReporter = class(TInterfacedObject, IAMErrorLog)
public
function LogError(Severity: longint; const pErrorString: WideString;
ErrorCode: longint; HResult: longint; var pExtraInfo: OleVariant): HResult; stdcall; end;