【发布时间】:2012-11-17 12:06:04
【问题描述】:
我正在为现有应用程序构建自动化界面。在实现了一个 DLL 服务器和一个 EXE 服务器(主要是为了熟悉 COM 的基础知识)之后,我现在可以从一个 IDL 文件生成一个类型库,并且可以,例如,基本上从 VBScript 自动化我的应用程序:
Set oApp = CreateObject("MyApp.1")
oApp.ShowAboutBox()
这个对不带参数的函数的简单调用是有效的。我要采取的下一步是调用一个带参数的函数。
IDL文件中函数的签名是
HRESULT CreateSomeChildWindow([out, retval] MyChildWindow** ppChildWindow);
在 VBScript 中我认为它会是
Dim oWnd As MyChildWindow
oWnd = oApp.CreateSomeChildWindow()
尽管MyChildWindow 当前未在注册表中注册为 COM 对象,但此调用已在 C++ 中工作。 MyChildWindow 不需要被注册的原因是CreateSomeChildWindow 只是在参数中返回指向创建的MyChildWindow 对象的接口指针。它没有注册的原因是我想避免冗余,而且我不希望直接实例化MyChildWindow(例如通过在VBScript中调用CreateObject)。
问题:
现在我想知道是否有必要注册MyChildWindow。我的假设是否正确,以便在 VBScript 中调用 CreateSomeChildWindow
- 我需要写
Dim oWnd As MyChildWindow - 为此,必须注册
MyChildWindow
如果答案是是,希望客户仍然不能直接MyChildWindow,因为我没有为它实现类对象?还是我必须实现一个类对象?
【问题讨论】:
标签: com vbscript automation dispatch