您必須執行許多通常在使用工具箱時自動執行的步驟。首先,您必須運行Aximp.exe實用程序來生成.NET互操作程序集。使用Visual Studio命令提示符運行該工具。您將得到兩個程序集,axinterop.foo.dll包含一個派生類,它是從AxHost派生的,並允許您將該控件放置在窗體上。和interop.foo.dll,互操作程序集使COM接口實現了由.NET程序調用的控件。
接下來,您必須確保這些DLL存在於構建目錄中。最好的辦法是將它們添加到您的項目中,並將它們的複製到輸出目錄設置爲「複製,如果更新」。
現在,您可以在代碼中使用Assembly.Load(「axinterop.foo.dll」)來動態加載互操作程序集。
接下來,您必須創建控件的實例,請使用Assembly.CreateInstance()並傳遞AxHost包裝類的類型名稱。如果你不知道它的名字可能是什麼,那麼它不是很明顯,然後使用ildasm.exe來查看axinterop.foo.dll程序集。將返回的對象轉換爲AxHost。
接下來,您必須將控件添加到窗體的Controls集合中,以便它可見並且可用。在創建控件實例之前,您不能調用任何接口方法,直到添加了控件並且表單的Load事件已被觸發纔會發生。
接下來,您必須使用反射或動態關鍵字來獲取對由控件實現的接口的引用,以防需要設置屬性或調用方法。這很難做到,你需要先使用從工具箱中添加的控件編寫代碼,這樣你就不必過於費勁地猜出正確的名稱。
這顯然都很痛苦,很難得到正確的結果。通過將類庫添加到直接使用OCX並通過接口公開其重要屬性的項目中,可以獲得良好結果。並使用上的Assembly.Load()表示之一。
@logincp,以任何方式動態加載.ocx(native)? – abdul
我想動態不加入參考 – abdul
我認爲你應該改變你的問題,然後 – accfews