Python 3: 如何从.net DLL (Pythonnet) 创建抽象class 的实例,(以满足重载方法的签名)

Python 3: How to create an instance of an abstract class from a .net DLL (Pythonnet), (to satisfy the signature of overloaded methods)

我需要使用 pythonnet 从 DLL 调用方法。此方法需要一个特定类型的列表来填充返回的对象。经过一些研究,我发现提示我只需要一个虚拟对象(以满足签名)。

https://www.adrian.idv.hk/2018-08-15-pythonnet/

所以我需要一个虚拟对象。不幸的是 class 是一个抽象的 class,所以我不能调用构造函数。 在这里,我需要一些帮助来调用该方法。 clr.GetClrType() 没有帮助,它返回了 System.RuntimeType,而不是预期的 class 类型...

此处代码仅供参考:

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# 列表作为第二个参数。 可以这样做:

    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()

创建的