1

私は Python プログラマーではありませんが、IronPython と VB.Net を使用して簡単なスクリプトを動作させようとしています。私はかなり遠くまで行きましたが、今は参照によって引数を渡すことに固執しています。引数リストで VB 側から Python 側にデータを戻すことができる必要があります (Python はタプルを返しますが、.Net は返さないため)。ただし、このコードは機能しません。その理由はわかりません。

Pythonコードは次のとおりです。

def GetVoltages(voltages):
    fixture.StartScan()
    done=False
    counter=0
    while done == False:
        fixture.GetNumDataPoints(num)
        if num>=15:
            done=True
        else:
            counter=counter+1
        if counter>1000000:
            break
    if done == True:
        fixture.GetDataPoints(num, voltages)
    else:
        log.WriteLine("Failed to read voltages.")
    return done

buff = Array.CreateInstance(System.Double, 0)
if GetVoltages(buff):
    log.WriteLine("Checking voltages.")
    CheckVoltage(buff, 3, 22)
# do other stuff

Fixture は定義済みの変数であり、関数は正しく呼び出されますが、python 側の num と voltage は決して変化しません。VB 側の関数宣言は次のとおりです。

Public Function GetDataPoints(ByVal num As Integer, ByRef vals() As Double) As Boolean
Public Function GetNumDataPoints(ByRef num As Integer) As Boolean

いくつかのヒントを示す古いページをいくつか見つけましたが、正しい答えがわかりません。

4

1 に答える 1

0

基本的に、IronPython はrefおよびoutパラメータを tuple として結果にバンドルします。つまり、次のようなものが必要です。

success, num = fixture.GetNumDataPoints(num)
success, voltages = fixture.GetDataPoints(num, voltages)

refと配列の間に何らかの相互作用があるかもしれませんが、これは機能するはずです。

于 2012-11-07T23:04:27.387 に答える