2011-06-04 144 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。可能有更多的信息說明什麼樣的命令和狀態,但這是論證。