资讯详情

COM组件-接口-对象-C++的区别-关键术语-tlb文件-volatile-STDMETHOD-REFIID-DISPID

文章目录

    • 1.tlb文件
    • 2.volatile
    • 3.STDMETHOD和HRESULT
    • 4.STDMETHODIMP
    • 5.DISPID
    • 6.REFIID
    • 7.LCID
    • 8.DISPPARAMS
    • 9.VARIANT
    • 10.EXCEPINFO
??COM组件是二进制模块的复用,因此编写COM组件有许多概念需要理解。为了实现模块重用,调用接口必须标准化,以便在不同语言调用二进制模块时,模块可以按照标准重用。

??COM接口通常是一组函数的逻辑集合,继承IUnKnown接口。COM多个对象可以提供COM每个接口提供不同的服务,因此COM接口与COM对象一样,都是用的GUID客户通过标识GUID获取接口指针,然后通过接口指针获得相应的服务。

??为了调用Com库,需要理解com一些涉及库的文件,如tlb文件、术语。

1.tlb文件

??它是com类型库文件。需要使用相应的com##import …*.tlb”使用之。vc 编译器解析tlb生成文件的标准c 文件tlh、tli文件。tlh相当于类型申报(头文件),tli相当于定义实现(CPP文件)。详细描述了界面和类别声明和GUID值。

2.volatile

??当要求使用 volatile 在声明变量值时,系统总是从其内存中重新读取数据,即使其之前的指令刚刚从这里读取数据。而且读取的数据立即保存。volatile 指出 变量i 它可以随时改变,每次使用都必须从 i读取地址,因此编译器生成的汇编代码将从i的地址重新读取数据 b 中。

3.STDMETHOD和HRESULT

?? 。 STDMETHOD_它是定义指定返回类型的接口方法的宏,包括virtual关键字。可用于定义方法声明。 。例如: STDMETHOD_ (ULONG, release)()展开后就是 virtual ULONG STDMETHODCALLTYPE release() STDMETHODCALLTYPE 宏展开是 __stdcall。 STDMETHOD它还用于定义指定返回类型的接口方法,包括virtual关键字。 ?? ??HRESULT值包含以下字段:指示严重程度 1 位代码,零表示成功,1 代表失败。4 保留值 位代码,指示错误或警告,也称为设施代码的责任。 16 位代码描述错误或警告。

4.STDMETHODIMP

?? STDMETHODIMP是宏,#define STDMETHODIMP HRESULT STDMETHODCALLTYPE。标准调用协议返回。

5.DISPID

typedef LONG DISPID; 

?? This data type is used by IDispatch::Invoke to identify methods, properties, and arguments.

6.REFIID

#define REFIID const IID & typedef GUID IID; typedef struct _GUID { 
             unsigned long  Data1;     unsigned short Data2;     unsigned short Data3;     unsigned char  Data4[ 8 ]; } GUID; 

?? GUID; 总共有16个字节,所以不应该传输变量,最好是传输指针或引用。但由于指针的风险,所以使用常量的引用。

7.LCID

typedef DWORD LCID; 

?? 区域设置 ID (LCID) 表。Indicates that the parameter is a locale ID (LCID).

8.DISPPARAMS

?? 传输被调用函数的参数。

typedef struct tagDISPPARAMS     { 
             /* [size_is] */ VARIANTARG *rgvar;
    /* [size_is] */ DISPID *rgdispidNamedArgs;
    UINT cArgs;
    UINT cNamedArgs;
    } 	DISPPARAMS;

9.VARIANT

   Variant 是一种特殊的数据类型,除了定长 String 数据及用户定义类型外,可以包含任何种类的数据。Variant 也可以包含 Empty、Error、Nothing 及 Null等特殊值。可以用 VarType 函数或 TypeName 函数来决定如何处理 Variant 中的数据。变体类型Variant,能够在运行期间动态的改变类型。变体类型能支持所有简单的数据类型,如整型、浮点、字符串、布尔型、日期时间、货币及OLE自动化对象等,不能够表达Object Pascal对象。

typedef /* [wire_marshal] */ struct tagVARIANT VARIANT;

struct tagVARIANT
    { 
        
    union 
        { 
        
        struct __tagVARIANT
            { 
        
            VARTYPE vt;
            WORD wReserved1;
            WORD wReserved2;
            WORD wReserved3;
            union 
                { 
        
                LONGLONG llVal;
                LONG lVal;
                BYTE bVal;
                SHORT iVal;
                FLOAT fltVal;
                DOUBLE dblVal;
                VARIANT_BOOL boolVal;
                _VARIANT_BOOL bool;
                SCODE scode;
                CY cyVal;
                DATE date;
                BSTR bstrVal;
                IUnknown *punkVal;
                IDispatch *pdispVal;
                SAFEARRAY *parray;
                BYTE *pbVal;
                SHORT *piVal;
                LONG *plVal;
                LONGLONG *pllVal;
                FLOAT *pfltVal;
                DOUBLE *pdblVal;
                VARIANT_BOOL *pboolVal;
                _VARIANT_BOOL *pbool;
                SCODE *pscode;
                CY *pcyVal;
                DATE *pdate;
                BSTR *pbstrVal;
                IUnknown **ppunkVal;
                IDispatch **ppdispVal;
                SAFEARRAY **pparray;
                VARIANT *pvarVal;
                PVOID byref;
                CHAR cVal;
                USHORT uiVal;
                ULONG ulVal;
                ULONGLONG ullVal;
                INT intVal;
                UINT uintVal;
                DECIMAL *pdecVal;
                CHAR *pcVal;
                USHORT *puiVal;
                ULONG *pulVal;
                ULONGLONG *pullVal;
                INT *pintVal;
                UINT *puintVal;
                struct __tagBRECORD
                    { 
        
                    PVOID pvRecord;
                    IRecordInfo *pRecInfo;
                    } 	__VARIANT_NAME_4;
                } 	__VARIANT_NAME_3;
            } 	__VARIANT_NAME_2;
        DECIMAL decVal;
        } 	__VARIANT_NAME_1;
    } ;
typedef VARIANT *LPVARIANT;

typedef VARIANT VARIANTARG;

typedef VARIANT *LPVARIANTARG;

10.EXCEPINFO

   描述在 IDispatch::Invoke 过程中发生的异常。

typedef struct tagEXCEPINFO { 
        
    WORD  wCode;
    WORD  wReserved;
    BSTR  bstrSource;
    BSTR  bstrDescription;
    BSTR  bstrHelpFile;
    DWORD dwHelpContext;
    PVOID pvReserved;
    HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);
    SCODE scode;
} EXCEPINFO, * LPEXCEPINFO;

  合理的脚本代码可以有效的提高工作效率,减少重复劳动。

标签: tlh0400位移传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台