gpt4 book ai didi

c# - Python.NET : "Cannot instantiate enumeration"

转载 作者:行者123 更新时间:2023-12-01 05:26:59 25 4
gpt4 key购买 nike

因此,我成功地在 Python .NET 中导入了托管 .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 .NET 中实例化这样的枚举的正确方法是:

stat = CML_EVENT_STATUS.EVENT_STATUS_BRAKE

然后你可以像这样调用该方法:

stat = amp.ReadEventSticky(stat)

请注意,refout 参数在 Python 中的工作方式与在 C# 中的工作方式不同。如 Writing iron python method with ref or out parameter 中更详细地描述。 , refout 参数是从方法中返回的,而不是修改传入的变量。如果有多个返回值(例如,方法返回一个值,并且有一个 ref 参数),那么将返回一个元组,首先是方法的返回值,然后按顺序返回 refout 参数。

假设 ReadEventStickyvoid,这非常简单:它只返回新的 CML_EVENT_STATUS 值。

关于c# - Python.NET : "Cannot instantiate enumeration",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21146815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com