2012-04-23 3 views
2

У меня возникли трудности с набором элементов управления ActiveX, используемых для автоматизации лабораторных инструментов. У меня есть все, чтобы работать в VB, в приложениях форм - так как они не будут работать в консольных приложениях. Моя компания работает в основном с python, и, таким образом, будет большое преимущество в написании наших драйверов на python, в основном для интеграции с конечными пользователями.Управление ActiveX в windows windows

Как таковой, я попытался встроить свои элементы управления activeX в формы windows. Я пробовал два разных способа введения своих элементов управления в формы:

1) с clr, ссылающимся на dll Axe после использования AxImp на исходном ocx. Затем я добавляю свой экземпляр элемента управления в качестве элемента управления формой и пытаюсь запустить его оттуда. Он выдает 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, который бросает общий «Исключение был брошен в адресат вызова». Следующий код был введен в базовой форме 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, когда экземпляр фактически добавлен в качестве элемента управления, кажется, я очень близок.

ответ

1

Вы не можете использовать методы элемента управления ActiveX, пока не будет создан его собственный дескриптор. Другими словами, только после вызова метода Show() формы.

Убедитесь, что вы правильно используете базовый план приложения Winforms, загляните в файл исходного кода Program.cs образца приложения C# Winforms. Вызов Application.Run() необходим. Используйте событие загрузки формы (или переопределите OnLoad) в качестве первого события, в котором вы можете фактически начать использовать элемент управления.

+0

твердый, спасибо много! Кажется, это работает. Так близко :) – user1328265

Смежные вопросы