ラボ機器の自動化に使用される一連の ActiveX コントロールに問題があります。コンソール アプリケーションでは動作しないため、VB やフォーム アプリケーションですべて動作するようにしました。私の会社は主に python で作業しているため、主に lims の統合のために、ドライバーを python で書くことには大きな利点があります。
そのため、ironpython Windows フォーム内に ActiveX コントロールを埋め込もうとしました。フォームにコントロールを導入する 2 つの異なる方法を試しました。
1) 元の ocx で AxImp を使用した後、clr が Ax 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 Windows フォームに導入されましたが、これらのオブジェクトをフォーム コントロールとして追加できませんでした。
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 では特に、それが何であるかを理解できません。非常に近いようです。