如何在Python中将所有方法调用委派给C#DLL

拉胡尔·维尔帕拉(Rahul Virpara)

我想将所有方法调用委托给我们编写的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)

我如何仅__getattr__在python类中实现呢?

我尝试了以下方法,但会引发错误“找不到匹配的方法”,

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在python文件中运行所有方法,并返回是否有任何方法返回true?

自动委派Java类的所有方法

如何在对象初始化时使用某些命名模式调用所有方法

如何显示对象的所有方法?

如何在Golang中动态调用结构的所有方法?

如何在Ruby中列出对象的所有方法?

在类的所有方法中将参数转换为相同标准的Python方法

响应所有方法调用的Python类的实例

如何在UWP中使用C#dll

java-在springboot webflux(功能程序样式)中,委派给私有静态方法比私有方法有什么好处?

从经典ASP调用.Net C#DLL方法

如何在Python中从C#dll导入子模块

如何在电子App中调用C#dll方法?

Ansible:委派给时更改python interpeter

如何在MEF中获取所有方法

字节好友-如何委派私有方法?

获取所有方法调用

无法从C#DLL进行http调用

在python中将单个函数委派给客户端服务器

如何从Delphi调用C#dll方法时解决错误外部异常E0434352

如何在ctypes库python中获取我的C#dll的依赖关系?

在C#dll中使用平台调用

片段将所有导航控件委派给Activity是一个好主意吗?

如何从ASTParser打印所有方法声明和调用

如何从c#dll,c ++ / cli调用的dll返回字节数组,uint值

如何在JavaScript中委派给对象数组

使用反射从C#Dll调用C#方法

c#委托:如何在具有潜在异常的事件(委托)上调用所有方法?

调用原型的所有方法?