python-3.x - Python 3:如何从 .net DLL (Pythonnet) 创建抽象类的实例,(以满足重载方法的签名)
问题描述
我需要使用 pythonnet 从 DLL 调用方法。此方法需要一个特定类型的列表来填充返回的对象。经过一番研究,我发现我只需要一个假人(以满足签名)的提示。
https://www.adrian.idv.hk/2018-08-15-pythonnet/
所以我需要一个虚拟对象。不幸的是该类是一个抽象类,所以我不能调用构造函数。在这里,我需要一些帮助如何调用该方法。clr.GetClrType() 没有帮助,它返回了 System.RuntimeType,而不是预期的类类型......
这里的代码仅供参考:
import sys
import clr
import ctypes
#change the sys.path
sys.path.insert(1,"D:\HBM Common API\API")
clr.AddReference("Hbm.Api.Common")
from Hbm.Api.Common import DaqEnvironment
from Hbm.Api.Common.Entities import Device
from Hbm.Api.Common.Entities.Problems import CommunicationFailedError
from Hbm.Api.Common.Entities.Channels import Channel
from Hbm.Api.Common.Entities.Problems import Problem
from Hbm.Api.Common.Enums import SettingType
from Hbm.Api.Common.Enums import LedFlashMode
clr.AddReference("Hbm.Api.QuantumX")
from Hbm.Api.QuantumX import QuantumXDevice
from Hbm.Api.QuantumX import QuantumXDeviceFamily
inst = DaqEnvironment.GetInstance() # there is no constructor for the environment
deviceList = inst.Scan()
#quantum = QuantumXDevice("10.10.10.100")
quantumFamily = QuantumXDeviceFamily()
retDevices = quantumFamily.Scan()
quantum = retDevices[0]
print('Yipiih: QuantumX Found: HW Number: ' + quantum.SerialNo)
#Problem = Problem() # this is not possible as it is an abstract class
typeProb = clr.GetClrType(Problem)
dummyProb = typeProb()
#call the Connect Method:
connected, retList = DaqEnvironment.Connect(retDevices[0], typeProb)
解决方案
DaqEnvironment.Connect() 需要一个 C# List 作为第二个参数。这可以这样做:
clr.AddReference("System.Collections")
from System.Collections.Generic import List
from Hbm.Api.Common.Entities.Problems import Problem
connect_problems = List[Problem]()
is_ok = env.Connect(found_devices[0], connect_problems)
found_devices 是通过调用 DaqEnvironment.Scan() 创建的
推荐阅读
- excel - VBA 代码将数据从第 2 行复制到一个工作表上的最后一行数据并粘贴到另一个工作表的第一个空行
- .net - 将 1 中的两个对象链接到 * 关联时,无法在种子方法中的对象中插入重复键
- sql - 子查询的返回值
- python - 试图刮,让 [] 回来
- python - 我如何捕捉 Python PyQt5 QTreeWidget 按回车键?
- python - 在不使用索引的情况下删除匹配值之后的所有列
- sql - 从 SQL 查询到 MkDir 的 VBA 循环
- javascript - expressJS/jestJS:如何拆分 get() 函数来编写简单的 jest 单元测试?
- visual-studio-code - 如何在 Visual Studio Code 中移动到具有相同缩进的行
- javascript - 对于 React 中的 HOC 是否不鼓励这样做?