2011-06-04 180 views
2

我必须从VBScriptASP页面获取命令接口和状态接口,如下所示。 COM将部署在Windows CE设备中从另一个COM对象中获取COM对象

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`命名的标准方式吗?

回答

2

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

默认情况下,ATL方法将返回一个HRESULT值。为了实现你想要的东西,你可以使用ATL向导创建一个没有参数的方法。然后你可以手动修改你的IDL文件和相应的实现,以便你的方法返回一个CommandInterface。使用这种方法,您的IDL文件将是这样的:

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

并在您的ATL类的方法声明为:

CommandInterface* GetCommandInterface(); 

另一个选择可能是使用类型CommandInterface的一个输出parammeter ** 。快速测试使用ATL向导将显示您的IDL文件将是这样的:

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

我应该呼吁 StatusInterface和CommandInterface 的AddRef()的对象返回 自动化客户端之前(的VBScript )?

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

我应该创建对象每次 StatusInterface被调用或当创建 “PolyCold.Main”对象?

这个取决于你。只有你知道你的设计的细节和需求。

这是给予 名字StatusInterface和 CommandInterface的标准呢?

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