1
有點奇怪的問題,可能是大多數人想做的事情的後退,但我試圖解決遺留COM問題。從COM ProgID加載.NET程序集而不創建COM對象
我有兩個組件,它們實際上都是.NET程序集,但出於歷史原因,一個是將另一個加載爲COM對象(程序集爲COM Interop註冊)。這是一個插件體系結構,其插件由COM ProgID標識,所以這是我獲得加載插件程序集的唯一信息。
一種技術我已經試過是:
var objType = Type.GetTypeFromProgID("My.ProgId");
var objLateBound = Activator.CreateInstance(objType);
IMyInterface netAssembly;
try
{
netAssembly = (IMyAssembly)objLateBound;
}
catch (Exception)
{
netAssembly = null;
}
如果轉換到.NET接口成功,我知道我有一個.NET程序集,並可以通過接口來訪問它。但是,這種技術有點笨拙,特別是在64位系統上,我遇到了COM方面的問題。如果可能的話,我寧願消除加載COM對象並直接作爲.NET程序集加載插件。
但是我唯一需要做的就是插件的COM ProgID。
那麼,我怎樣才能從一個COM ProgID加載一個.NET程序集,而不創建任何COM對象?
啊,沒錯。看起來我可能一直在想這個問題。我想也許有一種方法可以從類型而不是爬行註冊表,但你的例子使它看起來相當簡單。感謝代碼片段,這讓我的生活變得更加輕鬆,感謝您花時間做到這一點。 – 2009-10-23 18:34:49