2012-02-28 18 views
0

私のアプリケーションC#3.5でironpython 2.6.2の実装を使用していますが、次のエラーが表示されます。「メソッドまたは操作が実装されていません。 DLRとIronPythonのアセンブリへError IronPython + C#3.5

を追加しまし参照(すべて「C:\プログラムファイル\ IronPythonの2.6」であるIronPythonのインストールディレクトリ、で見つかった私のマシン上):

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 

エラーが発生このライン上のS:

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

ここでエラーが発生しますか。どの行? –

+0

var result = op.Invoke(メソッド、10、20,30); //メソッドを呼び出して結果を得る – user1237699

答えて

0

たぶん、あなたはこのような4つの引数の代わりに、3でそれを呼び出す必要があります。他の回答で指摘されたとして、それはあなたの方法は、4つのパラメータを必要とするように見えると

>>> 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 
>>> 
+0

申し訳ありませんが、私は理解できませんでした。 – user1237699

0

c#コードから3でのみ呼び出されます。私が質問する質問(Pythonの専門家ではない)は、あなたのpythonメソッドがパラメータselfを持っている理由は何ですか? 4つの引数を使用してPythonのメソッドInvoke

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

2:私は

1おそらくあなたの問題を解決しますどちらも、あなたは1 2のことを行う必要があり、自己を含まないRedfineあなたのpythonの方法を考えているだろう:

... 
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

私はあなたのヒントに従いましたが、私の問題を解決しなかったので、同じエラーが発生しました。 多分、私は自分のコードを変更することができましたが、(私はPythonの専門家ではありません)どのように分かっていません。 私はPythonファイルのメソッドを呼び出してパラメータを送信する必要があります。クラスは必要ありません。 – user1237699

+0

ちょうど興味のない、あなたは同時に両方をやったのですか、あるいは1つの変更を加えて、もう一度やり直してみましたか?私はあなたが上記の2つの変更のうちの1つを行う必要があると思う。 –