在使用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