Function Reference

首页  后退  前进

警告:此函数是实验性的. 可能无法正常工作, 也可能包含错误. 如以后被修改或删除, 恕不另行通知.

 

不要报告此函数的错误或请求新的功能.

 


ObjCreateInterface

 

从给定的类名/对象指针, 接口标识符和描述字符串创建一个对象的引用.

 

ObjCreateInterface ( "CLSID" , "IID" [, "interface_description",[flag = True]] )

参数

CLSID

类标识符或对象的指针. 如果是类标识符, 可以用 ProgID 或 CLSID 字符串表示形式.

IID

接口标识符的字符串表示形式.

interface_description

[可选] 对象的 v-table(v表) 描述字符串. 使用关键字的缺省访问双接口 IDispatch.

flag

[可选] 默认值 True, 从 IUnknown 继承的对象接口.

返回值

成功:

返回一个对象.

失败:

@error 设置 为非 0 值.

备注

ObjCreateInterface() 创建对象和方法, 在接口描述字符串中列出.

COM 对象(基于 IUnknown)前三种方法总是 QueryInterface, AddRef 与 Release. 不要指定它们内部的描述字符串.

 

描述字符串列出的方法必须是 v-table(v表) 的接口顺序.

如果您提供了一个无效的或不正确的描述, AutoIt 可能会变得不稳定或崩溃.

 

描述字符串的格式:

$sTagInterface = "MethodName1 RetType(ParamType1;ParamType2;...); MethodName2 RetType(..."

 

默认情况下, AutoIt 使用 COM 的 'stdcall' 调用约定. 要使用 'cdecl', 在返回类型后面放置 ':cdecl'.

 

有效的类型:

类型

描述

none

无值 (仅返回类型有效 - 相当于 C 语言的 void)

byte

无符号 8 位整数

boolean

无符号 8 位整数

short

16 位整数

word, ushort

无符号 16 位整数

int, long

32 位整数

bool

32 位整数

dword, ulong, uint

32 位无符号整数

hresult

32 位整数

int64

64 位整数

uint64

64 位无符号整数

ptr

一般指针 (void *)

hwnd

窗口句柄 (指针)

handle

句柄 (指针)

float

单精度浮点数

double

双精度浮点数

int_ptr, long_ptr, lresult, lparam

x86 或 x64版本的 AutoIt 运行时, 一个大到足以容纳指针的整数.

uint_ptr, ulong_ptr, dword_ptr, wparam

x86 或 x64版本的 AutoIt 运行时, 一个大到足以容纳指针的无符号整数.

str

ANSI 字符串 (至少分配 65536 个字符).

wstr

Unicode 宽字符串 (至少分配 65536 个字符).

bstr

复合数据类型, 由长度前缀, 数据串和终止符组成

variant

一个标签组合, 可以用来表示任何其它数据类型

idispatch, object

复合数据类型, 表示对象 IDispatch 接口

clsid

128 位整数形式的 GUID 字符串

struct

用于 DllStructCreate() 创建的结构

*

添加 * 到类型字符串尾端, 引用另一个类型. 例如 "int*" 传递一个指针到 "int" 类型.

 

有关对象的更多信息见 Obj/COM 参考.

相关

ObjCreate

函数示例

#include <MsgBoxConstants.au3>
Example()
Func Example()
    ; Declare the CLSID, IID and interface description for ITaskbarList.
    ; It is not necessary to describe the members of IUnknown.
    Local Const $sCLSID_TaskbarList = "{56FDF344-FD6D-11D0-958A-006097C9A090}"
    Local Const $sIID_ITaskbarList = "{56FDF342-FD6D-11D0-958A-006097C9A090}"
    Local Const $sTagITaskbarList = "HrInit hresult(); AddTab hresult(hwnd); DeleteTab hresult(hwnd); ActivateTab hresult(hwnd); SetActiveAlt hresult(hwnd);"
    ; Create the object.
    Local $oTaskbarList = ObjCreateInterface($sCLSID_TaskbarList, $sIID_ITaskbarList, $sTagITaskbarList)
    ; Initialize the iTaskbarList object.
    $oTaskbarList.HrInit()
    ; Run Notepad.
    Run("notepad.exe")
    ; Wait for the Notepad window to appear and get a handle to it.
    Local $hNotepad = WinWait("[CLASS:Notepad]")
    ; Tell the user what to look for.
    MsgBox($MB_SYSTEMMODAL, "", "Look in the Taskbar and you should see an entry for Notepad." & @CRLF & @CRLF & "Press OK to continue.")
    ; Delete the Notepad entry from the Taskbar.
    $oTaskbarList.DeleteTab($hNotepad)
    ; Tell the user to look again.
    MsgBox($MB_SYSTEMMODAL, "", "Look in the Taskbar.  There should no longer be a Notepad entry but Notepad is still running." & @CRLF & @CRLF & "Press OK to continue.")
    ; Close Notepad.
    WinClose($hNotepad)
EndFunc   ;==>Example

----------------------------------------