2012-05-31 24 views
3

我想將此代碼轉換爲C#.NET Framework 3.5,但該版本不是晚期綁定友好的。如果我使用4.0,我會使用動態類型,但目前這不是一個選項。在C#和.NET Framework 3.5中的後期綁定

複雜的東西是我真正想要創建的對象(atl3270Tool)是在參數中創建的。幫助將不勝感激。

Dim atl3270Tool 
Dim ErrMsg As String 
Dim S_OK As UInt16 = 0 
Dim atlDirectorObject = CreateObject("atlDirectorObject.atlDirector") 
If atlDirectorObject.CreateTool("3270", 1, True, True, 0, atl3270Tool, ErrMsg) <> S_OK Then 
    'Terminate 
End If 
+0

看起來像你試圖將vb代碼轉換爲.net 3.5中的c#。你的問題是讓你的'atDirectoryObject'與c#一起工作。我建議你看看這些主題1 - http://msdn.microsoft.com/en-us/library/e7a79b4y(v=vs.100).aspx 2 - http://msdn.microsoft.com/en -US/library/ms173184(v = vs.100).aspx –

+0

簡單來說,C#或VB中沒有動態類型。它們都是靜態語言。我永遠不會明白爲什麼C#決定將一大羣人與他們的「動態」關鍵字混淆起來。它應該是「遲到」。 –

回答

5

在vb.net中,後期綁定很容易做到。因此,請利用.NET對不同語言編寫代碼的支持,添加一個vb.net類庫項目來包裝COM組件。

標識符名稱上的「atl」前綴很奇怪。 ATL是ActiveX模板庫的縮寫,是一種非常流行的編寫COM組件的C++庫。默認情況下,它會創建支持雙重綁定的服務器,包括遲到和早期。對於早期綁定,你需要一個類型庫,它通過ATL項目中的默認值嵌入到可執行文件中。因此,請確保您沒有在這裏浪費時間編寫早期綁定的C#代碼。項目+添加引用,瀏覽選項卡,選擇DLL。如果你沒有投訴,那麼你是金,使用對象瀏覽器來查看生成的互操作庫。

+0

注意 - 有時,您將無法使用早期綁定在C#中輕鬆構建COM對象的實例。您將不得不使用[Activator](http://msdn.microsoft.com/en-us/library/system.activator.aspx)類來動態創建對象的實例。如果發生這種情況,請使用'Activator.CreateInstance(typeName)'。 – GregRos

+0

這就是所謂的後期綁定:) –

+0

這是後期綁定的一個非常有限的例子,是的。但是在這種情況下它的唯一目的是因爲COM對象的構造函數有時從.NET隱藏。與使用動態關鍵字的NET 4.0不同,他仍然不能在這種實例化的對象上舒適地調用方法。 – GregRos