您的位置:首页 > 其它

关于COM接口使用时候的一个低级错误

2012-07-09 14:44 525 查看
在使用dll的一个COM接口时候,由于有一些结构体或枚举值没有定义,且在app中不调用这个接口,就直接给注释掉了。导致api寻址错误,直接调用dll中错误的api地址。奇怪的现象导致。

ILMH264EncoderOld1 : public IDispatch

{

public:

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_QualityFactor(

/* [retval][out] */ long *pQualityFactor) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_QualityFactor(

/* [in] */ long QualityFactor) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_IFrameInterval(

/* [retval][out] */ long *pIFrameInterval) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_IFrameInterval(

/* [in] */ long IFrameInterval) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_PFrameInterval(

/* [retval][out] */ long *pPFrameInterval) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_PFrameInterval(

/* [in] */ long PFrameInterval) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_SymbolMode(

/* [retval][out] */ eH264SYMBOLMODE *pSymbolMode) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_SymbolMode(

/* [in] */ eH264SYMBOLMODE SymbolMode) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_FrameRate(

/* [retval][out] */ float *pFrameRate) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_FrameRate(

/* [in] */ float FrameRate) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_EnableRateControl(

/* [retval][out] */ VARIANT_BOOL *pEnableRateControl) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_EnableRateControl(

/* [in] */ VARIANT_BOOL EnableRateControl) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_BitRate(

/* [retval][out] */ long *pBitRate) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_BitRate(

/* [in] */ long BitRate) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_EncodingSpeed(

/* [retval][out] */ eH264ENCODINGSPEED *pSpeed) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_EncodingSpeed(

/* [in] */ eH264ENCODINGSPEED Speed) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_EncodingThreads(

/* [retval][out] */ eH264ENCODINGTHREADS *pThreads) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_EncodingThreads(

/* [in] */ eH264ENCODINGTHREADS Threads) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_OutputFormat(

/* [retval][out] */ eH264OUTPUTFORMAT *pFormat) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_OutputFormat(

/* [in] */ eH264OUTPUTFORMAT Format) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_EnableSuperCompression(

/* [retval][out] */ VARIANT_BOOL *bSuperCompression) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_EnableSuperCompression(

/* [in] */ VARIANT_BOOL bSuperCompression) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_TimeQualityFactorFileName(

/* [retval][out] */ BSTR *pFileName) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_TimeQualityFactorFileName(

/* [in] */ BSTR FileName) = 0;

virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE WriteToRegistry( void) = 0;

};

这个是原COM定义的接口,在使用中我们的工程师注释掉了几行

ILMH264EncoderOld1 : public IDispatch

{

public:

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_QualityFactor(

/* [retval][out] */ long *pQualityFactor) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_QualityFactor(

/* [in] */ long QualityFactor) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_IFrameInterval(

/* [retval][out] */ long *pIFrameInterval) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_IFrameInterval(

/* [in] */ long IFrameInterval) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_PFrameInterval(

/* [retval][out] */ long *pPFrameInterval) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_PFrameInterval(

/* [in] */ long PFrameInterval) = 0;

// virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_SymbolMode(

// /* [retval][out] */ eH264SYMBOLMODE *pSymbolMode) = 0;

//virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_SymbolMode(

// /* [in] */ eH264SYMBOLMODE SymbolMode) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_FrameRate(

/* [retval][out] */ float *pFrameRate) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_FrameRate(

/* [in] */ float FrameRate) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_EnableRateControl(

/* [retval][out] */ VARIANT_BOOL *pEnableRateControl) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_EnableRateControl(

/* [in] */ VARIANT_BOOL EnableRateControl) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_BitRate(

/* [retval][out] */ long *pBitRate) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_BitRate(

/* [in] */ long BitRate) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_EncodingSpeed(

/* [retval][out] */ eH264ENCODINGSPEED *pSpeed) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_EncodingSpeed(

/* [in] */ eH264ENCODINGSPEED Speed) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_EncodingThreads(

/* [retval][out] */ eH264ENCODINGTHREADS *pThreads) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_EncodingThreads(

/* [in] */ eH264ENCODINGTHREADS Threads) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_OutputFormat(

/* [retval][out] */ eH264OUTPUTFORMAT *pFormat) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_OutputFormat(

/* [in] */ eH264OUTPUTFORMAT Format) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_EnableSuperCompression(

/* [retval][out] */ VARIANT_BOOL *bSuperCompression) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_EnableSuperCompression(

/* [in] */ VARIANT_BOOL bSuperCompression) = 0;

virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_TimeQualityFactorFileName(

/* [retval][out] */ BSTR *pFileName) = 0;

virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_TimeQualityFactorFileName(

/* [in] */ BSTR FileName) = 0;

virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE WriteToRegistry( void) = 0;

};

eH264SYMBOLMODE 中是个short枚举变量。导致调用后面的接口返回错误的结果get_BitRate
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: