代码之家  ›  专栏  ›  技术社区  ›  prosseek

C、F、Ironpython和IronRuby的集成

  •  5
  • prosseek  · 技术社区  · 14 年前

    我被告知,从C和F源生成的程序集文件在编译为.NET程序集时是可互操作的。

    • 问题1:这是否意味着C可以像调用C函数一样调用F函数?
    • 问题2:Ironpython和IronRuby怎么样?我没有看到来自Ironpython/IronRuby的任何程序集dll。
    • 问题3:是否有任何简单的方法可以使用C或F中的Ironpython/IronRuby函数?

    任何示例代码都是很好的。

    3 回复  |  直到 14 年前
        1
  •  5
  •   Tejs    14 年前

    1)是的。使用一个简单的例子,在f_中,我可以调用c控制台应用程序的主要方法:

    open SampleApp
    
    SampleApp.Program.Main([| "Hello"; "World" |])
    

    2)对于DLR,我认为情况有点不同。我相信这就是您将如何执行Python(例如);

    ScriptEngine engine = Python.CreateEngine();
    ScriptSource script = engine.CreateScriptFromSourceFile("myPythonScript.py");
    ScriptScope scope = engine.CreateScope();
    
    script.Execute(scope);
    

    我的语法可能有点不正确,但你应该能够掌握要点。

    3)您需要下载一些特殊的DLR DLL,然后在C/F应用程序中引用它们,以便实现互操作。它们应该可以从Microsoft DLR站点获得。

        2
  •  3
  •   kemiller2002    14 年前

    我被告知汇编文件 由C和F源制成 编译时可互操作 到.NET程序集。

    是的,您可以在C组件中引用F组件。当您引用F对象等时,它们将像C对象一样工作。

    您也可以在C中访问Ironpython/Ruby代码,尽管它与仅引用程序集稍有不同。下面是一个例子:

    http://www.highoncoding.com/Articles/573_First_Look_at_the_IronRuby.aspx

        3
  •  2
  •   stej    14 年前

    问题3:是否有任何简单的方法可以使用C或F中的Ironpython/IronRuby函数?

    你可以看看 Embedding IronPython into a C# application

    基本上,它的作用(简化代码):

    var engine = Python.CreateEngine();
    var scriptSource = engine.CreateScriptSourceFromString(@"
    def foo(s):
      print s", SourceCodeKind.Statements);
    
    var scope = engine.CreateScope();
    scriptSource.Execute(scope);
    
    //Get a reference to the function
    Func<string, decimal> foo = scope.GetVariable<Func<string, decimal>>("foo");
    
    //Execute it
    Console.WriteLine(foo("a"));