Итак, мне удалось импортировать управляемую сборку .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&'.
Что я делаю неправильно? Я не могу найти никакой документации по объявлению типов перечислений или передаче их по ссылке, и это сводит меня с ума.
Python добавил класс «Enum» в 3.4: http://docs.python.org/3.4/library/enum.html Является ли ваше перечисление на основе этого? Если это так, 'status = CML_EVENT_STATUS (0)' должен быть эквивалентен вашей первой строке. –
Или, например, если имя '0'' SOME_EVENT', я бы предположил, что вы можете просто написать 'CML_EVENT_STATUS.SOME_EVENT', чтобы получить это значение. –
Это в Python 2.7, и я тоже попробовал. Тот же 'не может создать ошибку перечисления. Вы можете получить доступ к именам переименования, как вы сказали, но я все равно не могу вызвать функцию вообще. – Chriszuma