我正在爲現有應用程序構建自動化接口。在實現了一個DLL服務器和一個EXE服務器(主要是爲了熟悉COM的基礎知識)之後,我現在處於從IDL文件生成類型庫的地步,例如,基本上可以使我的應用程序從VBScript自動運行:使用COM自動化應用程序
Set oApp = CreateObject("MyApp.1")
oApp.ShowAboutBox()
這個簡單的調用一個不帶參數的函數。下一步我想要調用一個帶參數的函數。
在IDL文件中的函數的簽名是
HRESULT CreateSomeChildWindow([out, retval] MyChildWindow** ppChildWindow);
,並在VBScript我認爲這將是
Dim oWnd As MyChildWindow
oWnd = oApp.CreateSomeChildWindow()
這一呼籲已經在C++雖然MyChildWindow
目前尚未註冊工作作爲註冊表中的COM對象。原因MyChildWindow
不需要進行註冊是因爲CreateSomeChildWindow
只是將接口指針返回到參數中創建的MyChildWindow
對象。 不是註冊的原因是我想避免冗餘,並且我也不想MyChildWindow
被直接實例化(例如通過在VBScript中調用CreateObject
)。
問:
現在,我試圖找出是否有必要註冊畢竟MyChildWindow
。是我的假設是正確的,爲了調用CreateSomeChildWindow
在VBScript
- 我需要寫
Dim oWnd As MyChildWindow
- 對於這項工作,
MyChildWindow
必須註冊
而如果答案是是,希望客戶仍然不能直接MyChildWindow
,因爲我沒有爲它實現一個類對象?或者我將不得不實現一個類對象?
聽起來不錯,但調用'oApp.CreateSomeChildWindow()'給我一個錯誤,說參數的數量不正確。我需要什麼語法?如前所述,它從C++調用 - 所有必需的代碼都在服務器端。 – Dabbler
語法看起來不錯(至少看問題中的引用)。我首先要檢查的一個原因是,在更新它之後重新註冊了類型庫,並在其中添加了新的方法。它可能會發生,腳本仍然以某種方式使用舊的語法。 –
嗯,不,IDL文件暫時沒有改變,並且類型庫剛剛被註冊。 – Dabbler