Я программирование на С ++, которое было использовано для написания небольшого приложения в Visual Basic. В приложении находится среда выполнения IronPython, и я пытаюсь определить некоторую функцию в python, а затем вызвать их из VB. Я написал простую функцию тестирования в питонеВызов PythonFunction из приложения VB-приложения Iron Python
def test():
print "Test was Called"
Затем я использую железный питон создать ScriptSource из файла питона. Я могу найти переменную «test» через операции объекта, но я не могу понять, как вызвать объект, который. Так, например (в 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)
В этот момент в моем коде ТМП определяется как объект типа PythonFunction. Я не могу понять, как назвать эту функцию.
tmp()
Недействителен VB синтаксис. Я получил это далеко, теперь, как я могу выполнить эту, казалось бы, простую задачу?
Edit: Позвонив
pyEngine.Operations.Invoke(tmp)
Я могу вызвать функцию, и я вижу ожидаемый результат на стандартный вывод. У меня все еще создается впечатление, что есть какой-то тип-указатель типа, который я могу использовать для объектов типа PythonFunction, которые позволят мне напрямую вызвать temp без вызова механизма Python.
К сожалению, это не сработает. Я получаю исключение из «Невозможно передать объект типа« IronPython.Runtime.PythonFunction »для ввода« System.Action ».» – mjn12
Теперь мы добираемся куда-то - у меня есть тип, с которым я могу работать. Обновление. –
Ха, я только что обнаружил, что прямо перед тем, как я прокомментировал ваш пост. От чтения документации и просмотра примеров C# я чувствую, что должен уметь использовать tmp для вызываемого типа. См. Http://www.voidspace.org.uk/ironpython/dark-corners.shtml#delegates-and-calltarget0 – mjn12