从另一个COM对象获取COM对象

时间:2011-06-04 15:42:42

标签: com vbscript asp-classic windows-ce atl

我必须从VBScript页面的ASP获取下面给出的命令界面和状态界面。 COM将部署在Windows CE设备中

Set polyColdObj=CreateObject("PolyCold.Main")
Set statusObj = polyColdObj.StatusInterface()
Set commandObj = polyColdObj.CommandInterface()

我将使用Atl开发COM对象。我的怀疑是

  1. ATL COM中`StatusInterface`和`CommandInterface`的签名应该是什么?
  2. 在将对象返回到自动化客户端(VBScript)之前,我应该在`StatusInterface`和`CommandInterface`上调用AddRef()吗?
  3. 每次调用StatusInterface或创建'PolyCold.Main'对象时,我应该创建对象吗?
  4. 这是为“StatusInterface”和“CommandInterface”提供名称的标准方法吗?

1 个答案:

答案 0 :(得分:2)

  

应该签名的是什么   StatusInterface和CommandInterface   在ATL COM?

默认情况下,ATL方法将返回HRESULT值。为了实现您的目标,您可以使用ATL向导创建不带参数的方法。然后,您可以手动修改IDL文件以及相应的实现,以便您的方法返回CommandInterface。使用这种方法,您的IDL文件将如下所示:

[id(1)] CommandInterface* GetCommandInterface();

ATL类的方法声明将是:

CommandInterface* GetCommandInterface();

另一种选择可能是使用一个CommandInterface **类型的输出参数。使用ATL向导进行的快速测试表明,您的IDL文件将如下所示:

[id(1)] HRESULT StatusInterface([out] CommandInterface** outStatusInterface);
  

我应该在上面调用AddRef()吗?   StatusInterface和CommandInterface   在将对象返回之前   自动化客户端(VBScript)?

我会说是的,因为当你的局部变量超出范围时,VBScript / ASP应该调用Release()

  

我应该每次都创建对象吗?   调用StatusInterface或何时调用   'PolyCold.Main'对象是否已创建?

这个取决于你。只有您了解设计的细节和需求。

  

这是给予的标准方式吗?   StatusInterface和的名称   CommandInterface?

如果这些“元素”应该是接口类型,那么我会说不。通常,接口以大写字母I作为首字母命名。我会使用IStatus和ICommand作为例子。可能有更多的信息说明什么样的命令和状态,但这是有争议的。