Вызов метода объекта C # из IronPython - PullRequest
3 голосов
/ 17 марта 2010

Я пытаюсь встроить скриптовый движок в мою игру. Так как я пишу это на C #, я подумал, что IronPython отлично подойдет, но во всех примерах я смог найти вызов методов IronPython в C # вместо методов C # в сценариях IronPython.

Чтобы усложнить ситуацию, я использую Visual Studio 2010 RC1 в 64-разрядной версии Windows 7.

IronRuby работает так, как я ожидал, но я не очень знаком с синтаксисом Ruby или Python.

Что я делаю:

        ScriptEngine engine = Python.CreateEngine();
        ScriptScope scope = engine.CreateScope();

        //Test class with a method that prints to the screen.
        scope.SetVariable("test", this); 

        ScriptSource source = 
          engine.CreateScriptSourceFromString("test.SayHello()", Microsoft.Scripting.SourceCodeKind.Statements);

        source.Execute(scope);

Это приводит к ошибке: «Объект« TestClass »не имеет атрибута« SayHello »»

Эта точная установка отлично работает с IronRuby, хотя и использует "self.test.SayHello ()"

Я настороженно использую IronRuby, потому что он не такой зрелый, как IronPython. Если это достаточно близко, я мог бы пойти с этим, хотя.

Есть идеи? Я знаю, это должно быть что-то простое.

Ответы [ 2 ]

5 голосов
/ 06 мая 2010

У меня только что было это ... вы не публикуете весь свой код, но я предполагаю, что SayHello является открытым, что правильно, однако класс, содержащий функцию SayHello, также должен быть открытым, чтобы Python мог видеть Это.

1 голос
/ 11 мая 2010

Возможно, это связано с тем, что вы не объявили свой класс "test" публичным, чтобы сделать его видимым для IronPython.

...