帮忙翻译一段VC代码...
struct OverlayConfig {
int pos_x, pos_y;
int justify_x, justify_y;
int opacity;
bool bNonPremultAlpha;
bool bNeedInvertAlpha;
int ol_width, ol_height;
PVOID ol_buffer;
};
interface IVideoEffectProcessor {
virtual void EffectProcess(PBYTE src, PBYTE dst, DWORD width, DWORD height) = 0;
};//回调函数
interface IVideoGDIDrawer {
virtual void GDIDraw(HDC hdc, DWORD width, DWORD height) = 0;
};
DECLARE_INTERFACE_(IVCamTransConfig, IUnknown)
{
STDMETHOD(AddImageOverlay) (OverlayConfig* pIOC, int whichOne = 0) PURE;
// STDMETHOD(AddImageOverlayEx) (ImageOverlayConfig* pIOC, int whichOne = 0) PURE;
STDMETHOD(AddVideoEffect) (LONG effectType, PLONG effectId, LPTSTR sParamFormat) PURE;
STDMETHOD(SetVideoEffectParams) (LONG effectId, LPCTSTR sParam) PURE;
STDMETHOD(RemoveVideoEffect) (LONG index = 0) PURE;
STDMETHOD(RemoveVideoEffects) () PURE;
STDMETHOD(SetVideoGDIDrawer) (IVideoGDIDrawer* pDrawer) PURE;
STDMETHOD(SetVideoEffectProcessor) (IVideoEffectProcessor* pProcessor) PURE;
// STDMETHOD(SetAdvertisement) (LPCTSTR sAdv) PURE;
};
HRESULT CVCamSDKImpl::PlayVideoFile(LPCTSTR fileName)
{
StopPlay();
StopCapture();
// create filter graph
HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL,
CLSCTX_INPROC, IID_IGraphBuilder, (void **)&m_pGraph);
hr = m_pGraph->AddFilter(m_pVCamRenderer, L"Renderer");
#if 1
const CLSID CLSID_VCamTrans = {0x9CFB3966,0xB84C,0x4452,{0x9A,0x62,0x33,0xA2,0xC6,0x6E,0xEE,0xB1}};
const IID IID_IVCamTransConfig = {0x799b6eca, 0xbc9f, 0x4bd2, {0x91, 0x80, 0x45, 0x68, 0x46, 0x10, 0x42, 0xcd}};
IBaseFilter* pVCamTrans = NULL;
hr = CoCreateInstance(CLSID_VCamTrans, NULL, CLSCTX_INPROC, IID_IBaseFilter, (void **)&pVCamTrans);
hr = m_pGraph->AddFilter(pVCamTrans, L"VCam Effects Filter");
IVCamTransConfig* pConfig;
hr = pVCamTrans->QueryInterface(IID_IVCamTransConfig, reinterpret_cast< void** >(&pConfig));
LONG id;
TCHAR szParams[] = _T("bright[-255..255]={100}, contrast[0..32]={10}");
hr = pConfig->AddVideoEffect(0, &id, szParams);
#endif
----------------------------------------------------
主要是接口的定义部分,我自己翻译后,在访问接口中的方法时提示出错,不可存取的对象,以下是接口的定义.帮忙看下是否有错
const
CLSID_VCamTrans : TGUID = '{9CFB3966-B84C-4452-9A62-33A2C66EEEB1}';
IID_IVCamTransConfig : TGUID = '{799B6ECA-BC9F-4bd2-9180-4568461042CD}';
type
IVCamTransConfig = interface;
IVCamTransConfig = interface(IUnknown)
['{799B6ECA-BC9F-4bd2-9180-4568461042CD}']
function AddImageOverlay(pIOC : POverlayConfig; whichOne : integer = 0) : HRESULT;stdcall;
function AddVideoEffect(effectType : Longint ; effectId :Plongint; sParamFormat : PChar) : HRESULT;stdcall;
function SetVideoEffectParams(effectId : longint ; sParam : PChar) : HRESULT;stdcall;
function RemoveVideoEffect(index : Longint= 0) : HRESULT;stdcall;
function RemoveVideoEffects : HRESULT ;stdcall;
function SetVideoGDIDrawer(pDrawer : TSetVideoGDIDrawer) : HRESULT; stdcall;
function IVideoEffectProcessor(pProcessor : TIVideoEffectProcessor) : HRESULT ;stdcall;
end;
调用
var eid : longint;
Test : Pchar;
begin
eid := 0;
Test := 'bright[-255..255]={100}, contrast[0..32]={10}';
CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC, IID_IGraphBuilder, m_pVideo);
CoCreateInstance(CLASS_VCamRenderer, nil, CLSCTX_INPROC, IID_IBaseFilter,m_pVCamRenderer);
CoCreateInstance(CLSID_VCamTrans,nil,CLSCTX_INPROC,IID_IBaseFilter,P_VCamTrans);
m_pVideo.AddFilter(m_pVCamRenderer,'Renderer');
m_pVideo.AddFilter(P_VCamTrans,'Trans');
P_VCamTrans.QueryInterface(IID_IVCamTransConfig, m_pCamTranconfig);
m_pCamTranconfig.AddVideoEffect(0,@eid,Test); /运行到这里时,鼠标跟踪显示,对象不可存取,请问是哪里出错了?
前面运行一直正常,也就是说,接口对象有创建,访问后也有值...但是访问不了接口中的函数