# com.interface 库模块帮助文档

## com 成员列表 <a id="com" href="#com">&#x23;</a>

### com.interface() <a id="com.interface" href="#com.interface">&#x23;</a>
[返回对象:comInterfaceObject](#comInterfaceObject)

### com.interface(declInterface) <a id="com.interface" href="#com.interface">&#x23;</a>
COM 原生接口对象。  
参数 declInterface 必须指定 com.interface 命名空间下的接口声明类，  
或者用字符串指定 com.interface 命名空间已导入的声明类名称。。  
可以对返回对象添加匹配 declInterface 声明的成员函数。  
未定义成员在被调用时忽略并直接返回 0

### com.interface(implObjectOrPtr,declInterface) <a id="com.interface" href="#com.interface">&#x23;</a>
导入 COM 原生接口对象。  
参数 implObjectOrPtr 可指定 COM 对象、COM 对象指针、com.IUnknown 托管指针。  
参数 declInterface 必须指定 com.interface 命名空间下的接口声明类，  
或者用字符串指定 com.interface 命名空间已导入的声明类名称。  
在 COM 接口类中的自定义函数必须用 owner 代替 this 访问当前 COM 对象。

### com.interface(implTable,declInterface) <a id="com.interface" href="#com.interface">&#x23;</a>
实现 COM 原生接口对象。  
implTable 是一个纯表（元表）, 并定义与接口匹配的成员函数（被调用时忽略未定义成员）。  
参数 declInterface 必须指定 com.interface 命名空间下的接口声明类，  
或者用字符串指定 com.interface 命名空间已导入的声明类名称。  
在 COM 接口类中的自定义函数必须用 owner 代替 this 访问当前 COM 对象。

## com.interface 成员列表 <a id="com.interface" href="#com.interface">&#x23;</a>

所有 COM 原生接口声明类都在此命名空间内。  
所有 COM 原生接口声明类中的自定义函数必须用 owner 代替 this,  

owner 才指向实际绑定的 COM 原生对象。  
COM 原生接口声明类内部的 this 指向的是声明类而不是 COM 对象。

导入或实现 COM 原生接口对象。

### com.interface.IUnknown <a id="com.interface.IUnknown" href="#com.interface.IUnknown">&#x23;</a>
COM 原生接口声明类的基类。  
所有 COM 原生接口声明类必须直接继承此接口。  
所有 COM 原生接口声明类中的自定义函数必须用 owner 代替 this,  
owner 才指向实际绑定的 COM 原生对象。  
COM 原生接口声明类内部的 this 指向的是声明类而不是 COM 对象。

### com.interface.checkError(请输入原生函数返回值) <a id="com.interface.checkError" href="#com.interface.checkError">&#x23;</a>
如果有错误调用 error 函数抛出异常  
可选用参数 @2 指定抛出异常的调用级别:  
调用级别为 2 表示调用当前函数的函数

### com.interface.checkInterface(接口声明类) <a id="com.interface.checkInterface" href="#com.interface.checkInterface">&#x23;</a>
参数可指定 COM 原生接口声明类，  
或者用字符串指定 com.interface 命名空间已导入的声明类名称。  

此函数检查接口声明类是否有效，  
如果有效则返回声明接口的类对象，并将类的静态 IID 成员转换为 win.guid 结构体。  
如果是无效的声明类则抛出异常,可使用参数 @2 指定抛出异常的调用级别。

### com.interface.create <a id="com.interface.create" href="#com.interface.create">&#x23;</a>
创建或实现原生接口

### com.interface.create() <a id="com.interface.create" href="#com.interface.create">&#x23;</a>
[返回对象:comInterfaceObject](#comInterfaceObject)

### com.interface.create(clsid,declInterface) <a id="com.interface.create" href="#com.interface.create">&#x23;</a>
创建原生接口对象，参数 @1 指定 CLSID。  
参数 declInterface 必须指定 com.interface 命名空间下的接口声明类，  
或者用字符串指定 com.interface 命名空间已导入的声明类名称。

### com.interface.create(declInterface) <a id="com.interface.create" href="#com.interface.create">&#x23;</a>
实现原生接口。  
与直接调用 com.interface(declInterface) 作用相同。  
可以在对象返回后再增加 COM 接口声明类 declInterface 声明的接口方法。

### com.interface.loadTypelibrary(类型库,接口类名) <a id="com.interface.loadTypelibrary" href="#com.interface.loadTypelibrary">&#x23;</a>
自类型库加载接口类,  
并在 com.interface 命名空间创建参数 @2 指定名称的接口声明类,  
类型库可以是路径等 com.LoadTypeLibrary 函数可支持的参数，  
也可以是该函数创建的类型库对象。  
可选在定义接口类以后，  
在该类的命名空间下使用 _funtions 对象补全函数原型

## comInterfaceObject 成员列表 <a id="comInterfaceObject" href="#comInterfaceObject">&#x23;</a>

### comInterfaceObject.AddRef() <a id="comInterfaceObject.AddRef" href="#comInterfaceObject.AddRef">&#x23;</a>
引用计数加一，返回引用计数。  
返回值仅具有测试意义。

### comInterfaceObject.QueryInterface() <a id="comInterfaceObject.QueryInterface" href="#comInterfaceObject.QueryInterface">&#x23;</a>
[返回对象:comInterfaceObject](#comInterfaceObject)

### comInterfaceObject.QueryInterface(接口数) <a id="comInterfaceObject.QueryInterface" href="#comInterfaceObject.QueryInterface">&#x23;</a>
参数是接口类,参考com.interface.IUnknown源码

### comInterfaceObject.Release() <a id="comInterfaceObject.Release" href="#comInterfaceObject.Release">&#x23;</a>
引用计数减一，返回引用计数。  
返回值仅具有测试意义。

### 自动完成常量
_CLSCTX_INPROC=3  
_CLSCTX_INPROC_HANDLER=2  
_CLSCTX_INPROC_SERVER=1  
_CLSCTX_LOCAL_SERVER=4  
_CLSCTX_SERVER=5  
_FAILED=__/*hr*/ < 0  
_SUCCEEDED=__/*hr*/ >= 0  
_VT_ARRAY=0x2000  
_VT_BLOB=0x41  
_VT_BLOB_OBJECT=0x46  
_VT_BOOL=0xB  
_VT_BSTR=8  
_VT_BSTR_BLOB=0xFFF  
_VT_BYREF=0x4000  
_VT_CARRAY=0x1C  
_VT_CF=0x47  
_VT_CLSID=0x48  
_VT_CY=6  
_VT_DATE=7  
_VT_DECIMAL=0xE  
_VT_DISPATCH=9  
_VT_EMPTY=0  
_VT_ERROR=0xA  
_VT_FILETIME=0x40  
_VT_HRESULT=0x19  
_VT_I1=0x10  
_VT_I2=2  
_VT_I4=3  
_VT_I8=0x14  
_VT_ILLEGAL=0xFFFF  
_VT_ILLEGALMASKED=0xFFF  
_VT_INT=0x16  
_VT_INT_PTR=0x25  
_VT_LPSTR=0x1E  
_VT_LPWSTR=0x1F  
_VT_NULL=1  
_VT_PTR=0x1A  
_VT_R4=4  
_VT_R8=5  
_VT_RECORD=0x24  
_VT_RESERVED=0x8000  
_VT_SAFEARRAY=0x1B  
_VT_STORAGE=0x43  
_VT_STORED_OBJECT=0x45  
_VT_STREAM=0x42  
_VT_STREAMED_OBJECT=0x44  
_VT_TYPEMASK=0xFFF  
_VT_UI1=0x11  
_VT_UI2=0x12  
_VT_UI4=0x13  
_VT_UI8=0x15  
_VT_UINT=0x17  
_VT_UINT_PTR=0x26  
_VT_UNKNOWN=0xD  
_VT_USERDEFINED=0x1D  
_VT_VARIANT=0xC  
_VT_VECTOR=0x1000  
_VT_VERSIONED_STREAM=0x49  
_VT_VOID=0x18  
