如何从C#/ F#调用IronPython函数?

pro*_*eek 0 c# f# ironpython

这是C#,F#,IronPython和IronRuby集成的后续问题

为了使用Python的C/C++函数,SWIG是最简单的解决方案.反过来也可以使用Python C API,例如,如果我们有一个python函数,如下所示

def add(x,y):
    return (x + 10*y)

我们可以在C中提出使用此python的包装器,如下所示.

double Add(double a, double b)
{
    PyObject *X, *Y, *pValue, *pArgs;
    double res;

    pArgs = PyTuple_New(2);
    X = Py_BuildValue("d", a);
    Y = Py_BuildValue("d", b);

    PyTuple_SetItem(pArgs, 0, X);
    PyTuple_SetItem(pArgs, 1, Y);
    pValue = PyEval_CallObject(pFunc, pArgs);
    res = PyFloat_AsDouble(pValue);    

    Py_DECREF(X);
    Py_DECREF(Y);
    Py_DECREF(pArgs);
    return res;
}

IronPython/C#甚至F#怎么样?

  • 如何从IronPython调用C#/ F#函数?或者,IronPython/C#中是否有任何SWIG等效工具?
  • 如何从C#/ F#调用IronPython函数?我想我可以使用"engine.CreateScriptSourceFromString"或类似的东西,但我需要找到一种方法来调用IronPython函数看起来像一个C#/ F#函数,不是在字符串中编写代码,而是从文件中读取.

Bri*_*ian 5

你说'现在用字符串写代码,但是从文件中读取',好的,读取文件.

来自F#的Python:

let s = File.ReadAllLines("foo.py")
let engine = Python.CreateEngine()
let scriptSource = 
    engine.CreateScriptSourceFromString(s, SourceCodeKind.Statements)
...
Run Code Online (Sandbox Code Playgroud)

来自Python的F#:

import clr   
clr.AddReferenceToFile("SomeFsLib.dll") 
Run Code Online (Sandbox Code Playgroud)

我刚从这个问题的链接中得到了这些.没有尝试过,但是,它很简单,我觉得它"有效".不知道你还有什么要求.