【问题标题】:Calling a .Net function in Python which has a reference parameter在 Python 中调用具有引用参数的 .Net 函数
【发布时间】:2014-11-18 16:06:12
【问题描述】:

我在 VS2012 中使用 IronPython 并尝试调用一个接受 Ref 参数的 .Net 函数,

Lib.dll

public int GetValue(ref double value)
{
  ...
}

Python:

import clr
clr.AddReference('Lib.dll')
from LibDll import *

value =0.0
x = GetValue(value)

我错过了什么吗,在 C# 中我们使用ref 以及变量名,那么在 Python 中呢?

【问题讨论】:

  • 我不认为 Python 允许您像这样修改不可变数据类型。也许您可以重写您的 GetValue 函数,使其返回 Tuple<int, Double> 或其他内容。
  • 谢谢 Kevin,这是一个 Dll,我无法访问源代码,所以这是唯一的方法,所以 Python 部分支持 .NET?

标签: .net ironpython


【解决方案1】:

您可以通过两种方式从 IronPython 调用带有 out 或 ref 参数的方法。

在第一种情况下,呼叫由自动编组处理。返回值和更改的 ref 被包装在一个元组中,并且(以 15.1 作为要传递的双精度示例)可以像这样使用:

(returned, referenced) = GetValue(15.1)

更明确的方法是提供准备好的 clr-reference:

refParam = clr.Reference[System.Double](15.1)
result = GetValue(refParam)

【讨论】:

  • 谢谢西蒙,你能解释一下为什么它是 15.1 吗?
  • 我只是为这个例子选择了任何双精度值,因为在第一种情况下我不能传递“无”。在第二种情况下,什么都不提供(即隐式 clr 默认值为 0.0)会起作用。
猜你喜欢
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多