我在用於實驗室儀器自動化的一組activeX控件時遇到了困難。我已經讓他們在VB中工作,在表單應用程序中 - 因爲他們不能在控制檯應用程序中工作。我的公司主要使用python,因此在使用python編寫我們的驅動程序時會有很大的優勢,主要用於限制集成。Ironpython窗體中的ActiveX控件
因此,我試圖在Ironpython窗體中嵌入我的activeX控件。我嘗試了兩種不同的方式在窗體中引入我的控件:
1)在原始ocx上使用AxImp後,使用clr引用Axe dll。然後,我將控件的實例添加爲表單控件,並嘗試從那裏運行它。它拋出System.Windows.Forms.AxHost + InvalidActiveXStateException。
import clr
clr.AddReferenceToFileAndPath(r"C:\dlls\AxVCode3Lib.dll")
clr.AddReferenceByPartialName("System.Windows.Forms")
import System.Windows.Forms as Forms
import AxVCode3Lib
class activeXform(Forms.Form):
def __init__(self):
a = AxVCode3Lib.AxVCode3()
self.Controls.Add(a)
for i in self.Controls:
r = i.Initialize("serial")
print r
form = activeXform()
raw_input(">exit")
2)使用SystemReflection和的ProgID,這將引發一個通用的「異常已被調用的目標引發異常」。以下代碼是在基本的Ironpython窗體中引入的,但是我無法將這些對象添加爲窗體控件。
import System.Type
import System.Reflection
import System.Array
oType = System.Type.GetTypeFromProgID("VCODE3.VCode3Ctrl.1")
o = System.Activator.CreateInstance(oType)
args = System.Array[str](['serial'])
try:
r = oType.InvokeMember("Initialize", System.Reflection.BindingFlags.InvokeMethod, None, o, args)
print r
except Exception as e:
print e
現在我懷疑這些例子都失敗了,因爲我的表單中缺少一些屬性。但是我無法弄清楚它是什麼,特別是在情況1中,當實例被添加爲控件時,看起來我非常接近。
堅實,非常感謝!它似乎在工作。很近 :) – user1328265 2012-04-24 00:20:10