<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1632085368384154" crossorigin="anonymous"></script><script src="https://autohotkey.top/gtag.js"></script></head> <body> <h1>ComObjFromPtr</h1> <p>包装一个原始 <a href="https://learn.microsoft.com/windows/win32/api/oaidl/nn-oaidl-idispatch">IDispatch</a> 指针(COM 对象), 以供脚本使用.</p> <pre class="Syntax">ComObj := <span class="func">ComObjFromPtr</span>(DispPtr)</pre> <h2 id="Parameters">参数</h2> <dl> <dt>DispPtr</dt> <dd> <p>类型: <a href="../Concepts.htm#numbers">整数</a></p> <p>IDispatch 或派生接口的一个非空接口指针.</p> </dd> </dl> <h2 id="Returns">返回值</h2> <p>类型: <a href="ComObject.htm">ComObject</a></p> <p>返回一个包含<a href="ComObjType.htm#vt">变体类型</a> VT_DISPATCH 和给定指针的封装对象.</p> <p>封装一个 COM 对象可以使脚本更自然地使用<a href="../Objects.htm#Usage_Objects">对象语法</a>与之交互. 然而, 大多数脚本都不需要手动操作, 因为 <a href="ComObject.htm">ComObject</a>, <a href="ComObjActive.htm">ComObjActive</a>, <a href="ComObjGet.htm">ComObjGet</a> 和任何返回对象的 COM 方法都会自动创建一个包装对象.</p> <h2 id="Remarks">备注</h2> <p>封装器对象在适当的时候承担自动释放指针的责任. 函数<a href="ComObjQuery.htm">查询</a>对象的 IDispatch 接口; 如果返回一个接口, <em>DispPtr</em> 将被立即释放. 因此, 如果脚本打算在调用此函数后使用指针, 它必须先调用 <code><a href="ObjAddRef.htm">ObjAddRef</a>(DispPtr)</code> first.</p> <p><b>已知限制:</b> 每次包装 COM 对象时, 都会创建新的包装器对象. 如 <code>obj1 == obj2</code> 和 <code>array[obj1] := value</code> 这样的比较和赋值运算, 将这两个包装器对象视为唯一的, 即使它们包含相同的 COM 对象.</p> <h2 id="Related">相关</h2> <p><a href="ComObject.htm">ComObject</a>, <a href="ComValue.htm">ComValue</a>, <a href="ComObjGet.htm">ComObjGet</a>, <a href="ComObjConnect.htm">ComObjConnect</a>, <a href="ComObjFlags.htm">ComObjFlags</a>, <a href="ObjAddRef.htm">ObjAddRef/ObjRelease</a>, <a href="ComObjQuery.htm">ComObjQuery</a>, <a href="https://learn.microsoft.com/windows/win32/api/oleauto/nf-oleauto-getactiveobject">GetActiveObject (Microsoft Docs)</a></p> <a href="https://dftg.net">dftg</a></body> </html>