2016-12-16 45 views
1

我有一個基於VB的代碼塊,我需要在C#中重寫,我正在寫一個函數,它創建一個COM對象的實例並創建一個新的終端會話,去讀出屏幕並返回屏幕的內容。現在雖然我覺得我在C#中沒有采取正確的方法,並且希望得到一些反饋。在C#中正確設置COM對象的一個​​實例#

VB代碼

set bzlipi = CreateObject("BlueZone.LIPI") 
bzlipi.Username = "myuserid" 
bzlipi.Password = "mypassword" 
bzlipi.HostAddress = "101.122.0.138" 
bzlipi.ShowTransferStatusWindow = False 
bzlipi.LocalPromptBeforeOverwrite = False 
result = bzlipi.ReceiveFile("local.txt", "MYLIB/F4101") 
MsgBox bzlipi.ErrorMessage 

C#

using BZLIPILib; 
    using BZWHLLLib; 

    public void Connector() { 
    object Host = Activator.CreateInstance(Type.GetType("BZLIPILib.LIPI")); 
    //Set Host properties 
    } 

既然這樣,這不是不能識別主機內的任何屬性作爲其
VB對應上述一樣。我已經在我的VS項目的包管理器中提供了所有可用的COM對象
引用。我應該怎樣做
做不同?

+0

是否有沒有直接引用庫的原因? –

+0

沒有什麼真正的原因,除了供應商推薦的做法。 – LifeOf0sAnd1s

+1

實際上*的C#代碼直接引用庫,這就是爲什麼'using'指令可以工作的原因。實際上沒有使用它是不明智的。但需要'動態主機'和'Type.GetTypeFromProgID(「BlueZone.LIPI」)'。智能感知仍然不會顯示成員。 –

回答

1

變化:

using BZLIPILib; 
using BZWHLLLib; 
... 
object Host = Activator.CreateInstance(Type.GetType("BZLIPILib.LIPI")); 

...到:

using BZLIPILib; 
using BZWHLLLib; 
... 

LIPI Host = new LIPI(); 

...然後按預期的智能感知會工作。

更新:看來,實際所需的代碼是:

using BZLIPILib; 
using BZWHLLLib; 
... 

LipiObj Host = new LipiObj(); 

...按如下OP的評論。

+0

你大多是正確的!它實際上是LipiObj Host = new LipiObj(); – LifeOf0sAnd1s

+0

@ LifeOf0sAnd1s哦!不知道爲什麼'CreateObject(「BlueZone.LIPI」)'工作? – MickyD

+0

我不確定。我遇到了很多問題,因爲所有這些都嵌入到使用VB6的舊Auto Hot Key對象中 – LifeOf0sAnd1s

相關問題