如何在不调用/调用它的情况下将可调用对象传递给另一个函数/子例程?

时间:2016-07-20 20:54:31

标签: vba vbscript

我在MS Office 2013中使用VBA 7.1。我正在尝试与JavaScript中的函数进行交互(或者使用尽可能接近的缩短代码创建的接口CreateObject("HtmlFile").ParentWindow.close - 类似于{{在JavaScript中1}}。问题是,我正在尝试将它传递给另一个函数,但是当我传递它时,它一直在JavaScript 中调用实际的window.close函数。这就是它变得奇怪的地方:它不会在一些特定的内置函数中调用。

window.close

有没有办法在没有调用它的情况下传递

编辑:您可以使用以下方法复制设置:

CStr(obj) ' Invokes the interface; window close dialog appears
VarType(obj) ' Invokes the interface; window close dialog appears
IsEmpty(obj) ' Invokes the interface; window close dialog appears
TypeName(obj) ' Doesn't invoke the interface; returns "Object"
IsObject(obj) ' Doesn't invoke the interface; returns True

1 个答案:

答案 0 :(得分:0)

要回答您的问题,请传递对象的名称。

对象是代码。有一个对象工厂制作你的对象。

对象的数据结构是4x32位整数(VB中的Longs)。一个是引用计数(如果对象终止为0),则一个是VTable的地址(每个属性获取/设置和方法调用的地址),两个是保留的,未使用且始终是。

由于COM的魔力,您的对象在程序中显示为数据结构和加载的函数库(即使它是可执行文件而不是dll)。

传递尚不存在的对象传递名称。 JScript / VBScript可以在运行时编写代码。在VBScript中,请参阅executeexecuteglobaleval。所有这些都采用一串VBScript代码,以各种方式成为您程序的一部分。