저는 Visual Basic에서 작은 응용 프로그램을 작성하도록 도청 된 C++ 프로그래밍입니다. 응용 프로그램은 IronPython 런타임을 호스팅하며 파이썬에서 일부 함수를 정의하고 VB에서 호출하려고합니다. 파이썬에서 간단한 테스트 함수를 작성했습니다.Iron Python을 호스팅하는 VB 응용 프로그램에서 PythonFunction을 호출합니다.
def test():
print "Test was Called"
그런 다음 파이썬 파일에서 ScriptSource를 생성하기 위해 철 파이썬을 사용합니다. 개체 작업을 통해 "테스트"변수를 찾을 수 있지만 그 개체를 호출하는 방법을 알아낼 수 없습니다. (VB에서) 예를 들면 : 내 코드의 tmp에서이 시점에서
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 구문이 아닙니다. 지금까지이 작업을 수행해 보았습니다. 이제이 겉으로보기에는 간단한 작업을 어떻게 수행합니까?
편집 :
pyEngine.Operations.Invoke(tmp)
를 호출하여 나는 함수를 호출 할 수와 나는 표준 출력에서 예상 출력을 참조하십시오. 필자는 Python 엔진을 호출하지 않고 직접 temp를 호출 할 수있는 PythonFunction 유형의 객체를 캐스팅 할 수있는 몇 가지 함수 포인터 유형이 있다는 인상을 받고 있습니다.
불행히도 문제가 해결되지 않습니다. "IronPython.Runtime.PythonFunction '유형의 객체를'System.Action '을 입력 할 수 없습니다."라는 예외가 발생합니다. " – mjn12
이제 우리는 어딘가로 가고 있습니다 - 제가 작업 할 수있는 유형이 있습니다. 업데이트 중. –
하, 방금 전에 내가 당신의 글에 댓글을 달았 음을 발견했습니다. 설명서를 읽고 C# 예제를 보면서 tmp를 호출 형으로 변환 할 수 있어야한다고 생각합니다. http://www.voidspace.org.uk/ironpython/dark-corners.shtml#delegates-and-calltarget0을 참조하십시오. – mjn12