Y a-t-il un moyen de faire fonctionner ce scénario?Créer des scripts Python et des méthodes d'appel à partir de C#
Il existe un script Python. Il est construit dans une DLL en exécutant ce script avec IronPython:
import clr
clr.CompileModules("CompiledScript.dll", "script.py")
L'objectif est d'appeler les méthodes de cette DLL à partir du code C#. .NET Reflector montre qu'il existe une classe dans la DLL - DLRCashedCode
et les méthodes qui nous intéressent sont les méthodes statiques privées de cette classe.
Par exemple, il y a une fonction dans le script:
def scriptMethod(self, text):
...
sa représentation dans la DLL est:
private static object scriptMethod(Closure closure1, PythonFunction $function, object self, object text)
{
...
}
Closure
et PythonFunction
sont des classes IronPython (de Microsoft.Scripting.dll et IronPython.dll).
Jusqu'ici tout va bien. Est-il possible que cette méthode soit appelée par le code C#? L'idée d'utiliser la réflexion comme
Type t = typeof(DLRCachedCode);
string methodName = "scriptMethod";
MethodInfo method = t.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Static);
object[] parameters = new object[] { "param1", "param2" }; // the "params problem"
method.Invoke(null, parameters);
semble plus difficile à cause de la définition des paramètres de la méthode. S'ils sont (comment) initialisés correctement, pourrions-nous nous attendre à ce que la méthode fonctionne correctement?
Existe-t-il un meilleur moyen d'appeler cette méthode de C#? Pour diverses raisons, nous préférons que le script soit construit en tant qu'assemblage .NET et ne pas appeler le script lui-même.
La réponse de Jeff Hardy me demande s'il n'y a pas une façon plus directe d'utiliser la classe dll/python compilée à partir d'un ScriptEngine ... – djlawler
J'ai simplifié un peu le code et j'ai ajouté un appel à une méthode python. En outre, j'ai trouvé ceci (qui pourrait aider): http://codingbox.blogspot.com/2009_11_01_archive.html – djlawler
Vérifiez http://pastie.org/797185 pour une manière plus directe de le faire. –