2009-06-02 78 views
2

我正在做一些考古學,處理COM +如何調用com +組件?

我設法爭取一個簡單的COM DLL作爲一個COM +組件,到目前爲止,一切順利。

所以我有這個'foobar'com +組件,它的接口和我想調用的方法。

我的問題很簡單:我該如何打電話給這個組件?

任何.NET或VB6的答案被接受(我要檢查的部件是確定的,不關心客戶端)

感謝

編輯(09年6月3日):嗯,我很困惑。爲了正常工作,我的COM +組件需要它的註冊。爲什麼不?但是,那麼,如何確定我正在進行COM +調用,而不是COM呢?

回答

1

如果所有你想要的是在被調用時檢查組件響應,然後使用快速VBScript而不是在VB6/VB.NET中構建某些東西。

Dim o : Set o = CreateObject("Lib.Class") 
o.YourMethod "someParam" 

關注您的COM +應用程序組件服務,看是否請求的類旋轉起來。

+0

非常感謝,它的工作完美 – Vinzz 2009-06-03 07:32:50

+0

錯誤...其實,不,我的香草COM DLL已註冊,它回答我的電話,而不是COM +組件 – Vinzz 2009-06-03 07:38:48

+1

在COM組件註冊後,您應該將DLL拖到組件服務中的COM +應用程序中。然後,COM +將修復註冊表項以指導CreateObject調用。您正在使用服務器應用程序而不是圖書館應用程序嗎? – AnthonyWJones 2009-06-03 08:24:29

2

最簡單的VB.NET代碼片斷可能:

Dim myCom As Object 
myCom = CreateObject("MyCom.ProgId") 
myCom.Method(parms) 

您需要替換「MyCom.ProgId」與您的組件的實際進程id - 你可以從組件的屬性的常規選項卡獲得此在組件服務管理工具(聽起來像你已經得到了一個把握)

myCom.Method(PARMS)

簡直是要調用任何方法的佔位符,與參數方法需要。

下面是VB.NET的語法的一些實例鏈接:

http://msdn.microsoft.com/library/de...eateObject.asp

http://www.samspublishing.com/articl...le.asp?p=25857

http://msdn.microsoft.com/library/en...asp?frame=true

+0

您的鏈接似乎已死,但無論如何感謝您的洞察力。我現在缺乏的一種方式是引用COM +組件,以便能夠編譯我的客戶端 – Vinzz 2009-06-03 07:35:18

+0

當您遲到綁定時,不需要對COM組件進行引用 - 這是我的代碼示例中的語法。運行時將通過ProgId字符串查找組件,加載到內存中,然後嘗試調用代碼中的方法。 如果嘗試調用不存在的方法或傳遞錯誤的參數,這可能會創建一些以前未曾見過的新運行時錯誤。早期綁定可以防止這些類型的錯誤,編譯器會捕獲它們。 – Adam 2009-06-03 16:59:39

1

亞當在VB6的代碼是相似的:

Dim myCom As Object 
Set myCom = CreateObject("MyCom.ProgId") 
myCom.Method(parms 

這個例子後期將會受到一些表現的懲罰。 你可以以早期的方式調用你的方法,避免處罰。在這兩種VB6或VB.NET,只是COM + DLL添加到您的參考,你可以調用以這種方式對象:

VB6

dim myCom as MyCom.ProgId 
set myCom = new MyCom.ProgId 
myCom.Method 

VB.NET

dim myCom as new MyCom.ProgId 
myCom.Method(...) 
+0

謝謝,但我必須提供某種參考以編譯此項目,對不對?我怎樣才能對COM +組件進行引用? – Vinzz 2009-06-03 07:33:40

+0

COM +組件與COM組件相同,只是具有額外的事務性goo,因此您可以用同樣的方式引用它。在VB6中,轉到Project/References菜單。在VB.NET中,右鍵單擊解決方案資源管理器中的項目,然後選擇添加引用... – AngryHacker 2009-06-03 21:12:00

1

當你想使用COM +的RMI然後用這個

Dim o As Object 
Set o = CreateObject("Lib.Class", "MYSERVER") 

其中myserver是在其中創建COM +應用程序和DLL註冊計算機名稱。隨後

o.YourMethod "someParam" 

將被遠程調用。如果您僅使用自動化兼容接口,COM +將成功爲RMI創建代理。否則,您需要在客戶機上提供typelib。這可以是一個單獨的TLB或DLL本身。

+0

@Herbrich:這是VB6代碼。沒有'CreateObject'的用戶/傳遞參數 – wqw 2014-06-14 21:02:41