Ошибка IronPython + C # 3.5 - PullRequest
       11

Ошибка IronPython + C # 3.5

0 голосов
/ 28 февраля 2012

Я использую реализацию ironpython 2.6.2 в своем приложении c # 3.5, но получаю следующую ошибку: «Метод или операция не реализованы».

Добавлены ссылки на DLRи сборки IronPython (все они находятся в каталоге установки IronPython, который на моем компьютере называется «C: \ Program Files \ IronPython 2.6»):

IronPython.dll
IronPython.Modules.dll
Microsoft.Scripting.dll
Microsoft.Scripting.Core.dll

следует коду моего приложения:

ScriptEngine engine = Python.CreateEngine();        
//parameter file path       
ScriptSource source = engine.CreateScriptSourceFromFile(pathFilePy);        
ScriptScope scope = engine.CreateScope();
ObjectOperations op = engine.Operations;
source.Execute(scope); // class object
object classObject = scope.GetVariable("calc"); // get class object        
object instance = op.Invoke(classObject); // create instance
object method = op.GetMember(instance, "calc01"); // get method        
var result = op.Invoke(method, 10, 20,30); // call method and get result

файл кода .py

class calc(object):
    def calc01(self,var1,var2,var3):
        bla = ((var1+var2+var3)/3)
        return bla 

Ошибка в этой строке:

var result = op.Invoke(method, 10, 20,30); // call method and get result

Ответы [ 2 ]

0 голосов
/ 28 февраля 2012

, как было указано в другом ответе, похоже, что вашему методу нужно 4 параметра, и он вызывается только с 3 из кода c #.вопрос, который я хотел бы задать (не будучи экспертом по python), почему ваш метод python вообще имеет параметр self?Я бы подумал, что вам нужно сделать 1 из 2 вещей, обе из которых, вероятно, решат вашу проблему

1 Уточните свой метод python, чтобы он не содержал себя:

class calc(object):
def calc01(var1,var2,var3):
    bla = ((var1+var2+var3)/3)
    return bla 

2 Вызовите питонаметод, использующий 4 аргумента:

...
object classObject = scope.GetVariable("calc"); // get class object        
object instance = op.Invoke(classObject); // create instance
object method = op.GetMember(instance, "calc01"); // get method        
var result = op.Invoke(method, instance, 10, 20,30); // call method and get result
...
0 голосов
/ 28 февраля 2012

Может быть, вы должны назвать это с 4 аргументами вместо 3, как это:

>>> class calc(object):
...     def calc01(self,var1,var2,var3):
...         bla = ((var1+var2+var3)/3)
...         return bla
...
>>> calc1 = calc()
>>> calc.calc01(calc1,10,20,30)
20
>>>
...