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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值