ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-05 13:15:10  阅读:178  来源: 互联网

标签:python c python-2-7 python-net


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

但是我没有在python代码中做任何事情,除了调用dll方法,所以我不想为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

标签:python,c,python-2-7,python-net
来源: https://codeday.me/bug/20190705/1387706.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有