1

私は、Visual Basic で小さなアプリケーションを作成するために利用された C++ プログラミングです。アプリケーションは IronPython ランタイムをホストしており、Python で関数を定義して VB から呼び出そうとしています。Pythonで簡単なテスト関数を作成しました

def test(): 
    print "Test was Called"

次に、鉄の python を使用して、python ファイルから ScriptSource を作成します。オブジェクト操作を通じて「テスト」変数を検索することはできますが、そのオブジェクトを呼び出す方法がわかりません。例 (VB):

pyScope = engine.CreateScope()
pySource = engine.CreateSourceFromFile("C:\Some\File\path\test.py")
pySource.Execute(pyScope)
' Now I expect the function test() to be defined in pyScope
Dim tmp as Object
pyScope.TryGetVariable("test", tmp)

私のコードのこの時点で、tmp は PythonFunction 型のオブジェクトとして定義されています。この関数を呼び出す方法がわかりません。

tmp()

有効な VB 構文ではありません。ここまで来ましたが、この一見単純なタスクをどのように実行すればよいでしょうか?

編集:電話で

 pyEngine.Operations.Invoke(tmp)

関数を呼び出すことができ、stdout に期待される出力が表示されます。PythonFunction 型のオブジェクトをキャストできる関数ポインタのような型があり、Python エンジンを呼び出さずに temp を直接呼び出すことができるという印象がまだ残っています。

4

2 に答える 2

0

.NET 4 の VB には、C# と同じ動的サポートが必要です。http://msdn.microsoft.com/en-us/library/ee461504.aspx#Y5108 (下部) によると、次のことができるはずです。

Dim tmp As Object = scope.GetVariable("test")

...これは既に行っていることなので、.NET 4 をターゲットにしていることを確認してください。

それがうまくいかない場合は、次の汎用バージョンでキャストできるはずですGetVariable

Dim tmp As Action = scope.GetVariable(Of Action)("test")

Invoke最後に、 ObjectOperations で既に発見しました。

(私は VB を知らないので、構文を微調整する必要があるかもしれません。)

于 2012-04-17T15:28:43.317 に答える
0

これが機能するかどうかはわかりませんが、アクション タイプにキャストしてみてください。

DirectCast(tmp, Action)()

コメントに基づいて、これを試してください:

engine.ObjectOperations.Invoke(tmp, Nothing)
于 2012-04-17T13:38:04.947 に答える