关于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
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
相关文章推荐
- 关于包含头文件而编译时却一个未定义错误的原因(未使用命名名字空间)
- 关于Java中的继承和组合的一个错误使用的例子
- 当一个bug困扰你很久都解决不了的时候,它很可能就是一个低级错误
- 一个低级错误,关于timer
- 关于Android使用Instrumentation做功能测试的时候遇到的一个问题
- 一个HTML的低级错误!!!与不能同时使用
- js参数使用时常犯的一个低级错误
- Object-c学习点滴——使用NSMutableArray犯的一个低级错误!!
- 【学习笔记】汇编:关于DEBUG工具使用的时候的一个注意事项
- 关于使用OpenProcess的一个错误
- 关于Recyclerview使用时的一个错误java.lang.NoSuchMethodError: No static method getMatrix(Landroid/view/View;)
- 关于初学js中的一个低级错误
- 今天犯了一个很低级的错误 关于函数重载
- 致MFC新手,关于CDialogBar使用的一个小错误
- 犯了一个低级错误(关于2T硬盘的。)
- 在使用Git提交代码的时候犯了个低级错误
- 关于 操作必须使用一个可更新的查询 的错误
- 使用String类的indexOf()和subString方法犯了一个低级的错误
- 一个关于jar包的低级错误
- 在linux上使用"scp"命令拷贝一个目录到另一台服务器的时候报"not a regular file"错误的解决办法