2014-01-15 5 views
1

Итак, мне удалось импортировать управляемую сборку .NET в Python .NET и получить до того, как настроить несколько объектов и вызвать несколько функций, но я не могу понять, как этот должен работать.Python .NET: «Невозможно создать экземпляр перечисления»

Это C# код, который я пытаюсь порт:

  // read event sticky clears all initial events 
      CML_EVENT_STATUS status=0; 
      xAxisAmp.ReadEventSticky(ref status); 
      statusTextBox.Text = Convert.ToString(status); 

я могу импортировать CML_EVENT_STATUS, который сообщает, что это <class 'CMLCOMLib.CML_EVENT_STATUS'>, но когда я пытаюсь создать экземпляр этого, я получите эту ошибку:

>>> stat = CML_EVENT_STATUS() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: cannot instantiate enumeration 

Если есть еще один способ вызова функции, я не смог ее выяснить. Я пробовал звонить xAxisAmp.ReadEventSticky() и xAxisAmp.ReadEventSticky(0), которые только что вернули TypeError: No method matches given arguments.

Ближайший я получил эту ошибку из xAxisAmp.ReadEventSticky(CML_EVENT_STATUS):

System.ArgumentException: Object of type 'System.RuntimeType' cannot be converted to type 'CMLCOMLib.CML_EVENT_STATUS&'. 

Что я делаю неправильно? Я не могу найти никакой документации по объявлению типов перечислений или передаче их по ссылке, и это сводит меня с ума.

+0

Python добавил класс «Enum» в 3.4: http://docs.python.org/3.4/library/enum.html Является ли ваше перечисление на основе этого? Если это так, 'status = CML_EVENT_STATUS (0)' должен быть эквивалентен вашей первой строке. –

+0

Или, например, если имя '0'' SOME_EVENT', я бы предположил, что вы можете просто написать 'CML_EVENT_STATUS.SOME_EVENT', чтобы получить это значение. –

+0

Это в Python 2.7, и я тоже попробовал. Тот же 'не может создать ошибку перечисления. Вы можете получить доступ к именам переименования, как вы сказали, но я все равно не могу вызвать функцию вообще. – Chriszuma

ответ

2

Правильный способ создания экземпляра перечисления, как это в Python .NET является:

stat = CML_EVENT_STATUS.EVENT_STATUS_BRAKE 

Затем вы можете вызвать метод следующим образом:

ref Обратите внимание, что и out параметры Дон» t работает аналогично в Python, как в C#. Как описано более подробно в параметрах Writing iron python method with ref or out parameter, ref и out, параметры возвращаются из метода вместо изменения переданных переменных. Если имеется несколько возвращаемых значений (например, метод возвращает значение, а параметр ref), то кортеж будет возвращен с возвратным значением метода, а затем параметры ref и out по порядку.

Предполагая, что ReadEventSticky является void, это довольно просто: оно просто возвращает новое значение CML_EVENT_STATUS.

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