J'essaie d'utiliser IronPython comme intermédiaire entre une interface graphique C# et certaines bibliothèques C#, afin qu'elle puisse être scriptée après la compilation.C#/IronPython Interop avec bibliothèque de classes C# partagée
J'ai une DLL de bibliothèque de classe qui est utilisée par l'interface utilisateur graphique et le python et est quelque chose le long des lignes de celle-ci:
namespace MyLib
{
public class MyClass
{
public string Name { get; set; }
public MyClass(string name)
{
this.Name = name;
}
}
}
Le code IronPython est comme suit:
import clr
clr.AddReferenceToFile(r"MyLib.dll")
from MyLib import MyClass
ReturnObject = MyClass("Test")
puis, en C# je qualifierais comme suit:
ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = null;
scope = engine.CreateScope();
ScriptSource source = engine.CreateScriptSourceFromFile("Script.py");
source.Execute(scope);
MyClass mc = scope.GetVariable<MyClass>("ReturnObject ")
Quand j'appelle ce dernier morceau de code, source.Ex ecute (portée) court retourne avec succès, mais lorsque je tente l'appel GetVariable, il jette l'exception suivante
Microsoft.Scripting.ArgumentTypeException: expected MyClass , got MyClass
Ainsi, vous pouvez voir que les noms de classe sont exactement les mêmes, mais pour une raison quelconque, il pense qu'ils sont différent. La DLL se trouve dans un répertoire différent de celui du fichier .py (je n'ai pas pris la peine d'écrire toutes les informations d'installation du chemin), est-ce dû au fait qu'il y a un problème avec l'interpréteur pour IronPython? différence parce que c'est en quelque sorte les voir comme étant dans un contexte ou une portée différente?