gpt4 book ai didi

c# - 如何在 Python 中将所有方法调用委托(delegate)给 C# DLL

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:18 24 4
gpt4 key购买 nike

我想将所有方法调用委托(delegate)给我们编写的 C# DLL。我正在使用 pythonnet 加载 DLL 文件并从 DLL 调用方法。

这是我的 python 类,它工作正常,

import clr
clr.AddReference('MyDll')
from MyDll import MyLibrary


class MyProxy:
def __init__(self):
self.lib = MyLibrary()

def method1(self, first_arg, *args):
self.lib.method1(first_arg, args)

def method2(self, first_arg, *args):
self.lib.method2(first_arg, args)

但除了调用 dll 方法外,我没有在 python 代码中做任何事情,所以我不想为 dll 中的所有方法编写包装器方法。

上述方法允许我调用 python 方法,例如 MyProxy().method1(first_arg, arg2, arg3, arg4),它依次传递 first_arg 作为第一个参数和 arg2, arg3, arg4 作为 self.lib.method1(first_arg, args) 第二个参数中的数组。

这种行为对我来说是必要的,因为我所有的 C# 方法都有签名 method1(String first_arg, String[] other_args)

如何仅通过在我的 python 类中实现 __getattr__ 来实现这一点?

我试过下面的方法,但它抛出错误“找不到匹配的方法”,

class MyProxy:
def __init__(self):
self.lib = MyLibrary()

def __getattr__(self, item):
return getattr(self.lib, item)

编辑:我认为,当我像这样包装 DLL 方法时,

def method1(self, first_arg, *args):
self.lib.method1(first_arg, args)

python 负责将除第一个参数之外的其他参数转换为数组,并将该数组传递给 DLL 方法。它匹配 DLL 方法的签名(method1(String first_arg, String[] other_args)),因为 python 将第二个参数作为数组传递。

我们可以在 __getattr__ 方法中做任何事情来对除第一个参数之外的其他参数进行数组转换并传递给 DLL 方法吗?

最佳答案

未经测试,但类似这样的方法可能有效:

class MyProxy:
def __init__(self):
self.lib = MyLibrary()

def __getattr__(self, item):
lib_method = getattr(self.lib, item)
def _wrapper(first_arg, *args):
return lib_method(first_arg, args)
return _wrapper

关于c# - 如何在 Python 中将所有方法调用委托(delegate)给 C# DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52879041/

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