代码之家  ›  专栏  ›  技术社区  ›  Joe

pythonnet:c函数不修改传递给它的类实例

  •  1
  • Joe  · 技术社区  · 6 年前

    我有一个C级的

    public MY_CLASS(int number)
            {
                SomeField = number;
                SetElseWhere = 0;
            }
        }
    

    我想传递给C函数

    public static bool MyTask(string pathXML, out MY_CLASS test)
    

    我希望 MyTask 修改字段 SetElseWhere 以……为例 MY_CLASS

    在pythonnet中,我把函数称为

    import System
    
    my_dll = System.Reflection.Assembly.LoadFile('example.dll')
    MY_CLASS_t = my_dll.GetType('NAMESPACE.MY_CLASS')
    
    my_instance = System.Activator.CreateInstance(MY_CLASS_t)
    
    x = MyTask('test.xml', my_instance)
    

    现在越来越奇怪了,至少对我来说:

    返回值x是一个包含两个条目的元组,一个布尔值和一个对象 类型 NAMESPACE.MY_CLASS .但不是我作为属性声明的第二个参数发送的实例 out .

    当我检查结果时,我可以看到返回的 tuple已正确修改,但我发送的实例 尚未修改。

    你知道为什么吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   den.run.ai    6 年前

    好吧,我终于理解了你的问题,这个问题没有记录在案。在Python中没有out/ref参数的概念,因此对参数的修改将返回到元组中。

    这是一个公开的问题:

    https://github.com/pythonnet/pythonnet/issues/228

    推荐文章