2017-05-31 105 views
-1

Visual Basic中具有GetObject功能,其可以這樣如何在C#中創建COM對象的實例?

Set app = GetObject(, "Word.Application") 

1C企業可以使用也具有new COMObject()運算符,它也需要一個普通的字符串並返回相應的COM對象。

這個函數的C#等價物是什麼?

+0

VB默認不是類型安全的,C#是,通常你必須有生成Interop包裝打字安全的COM對象,然後才能在C#中使用它,請參閱https://msdn.microsoft.com/zh-cn/library/ms404285(v=vs.110).aspx – MikeT

回答

0

我在Microsoft.VisualBasic命名空間中發現了相同的GetObject函數。不滿意這一點,我已經反編譯該函數,並發現它如何創建COM對象:Marshal.GetActiveObjectActivator.CreateInstance

要反思COM對象,可以使用Oleauto.h中的IDispatch::GetTypeInfo方法。對於C#CodeProject也有一個整潔的包裝。

一些對象,如1C自動化(「V83.Application」)似乎不適用於C#的dynamic馬上。爲了解決這個問題,我創建了一個類,並從System.Dynamic.DynamicObject繼承。這使我可以覆蓋InvokeMethod並在其上呼叫IDispatch::Invoke

0

可以使用Activator.CreateInstance(string Progid)方法通過將COM類的程序ID來創建一個COM對象