comment puis-je charger une DLL c # en python?
Dois-je mettre du code supplémentaire dans les fichiers c #? (comme l'exportation dans des fichiers c ++)
Je ne veux pas utiliser IronPython. Je veux importer un module en Python!
C'est pour répondre à la deuxième partie de votre question Essayez de rendre visible le DLL COM).
en utilisant le
[ComVisible(true)]
Ok IronPython est une implémentation .net du langage Python La technologie va utiliser le DLR du .net 4.0 quand il arrivera donc IronPython aura plus de dynamisme (est-ce un mot). ( En anglais si vous êtes un Python, vous vous sentirez plus à l'aise lorsque vous utiliserez IronPython)
Vous pouvez donc choisir IronPython, si vous le faites, vous pouvez ignorer la partie visible COM. Puisque les deux (C #, Iron Python) sont sous .Net
Visitez ici pour un exemple C # DLL qui est visible pour COM
Le package Python for.NET et Python Implementation IronPython fonctionnent maintenant de la même manière.
Exemple pour un C # DLL MyDll.dll
:
import clr
clr.AddReference('MyDll')
from MyNamespace import MyClass
my_instance = MyClass()
Voir cet article pour plus de détails.
Python pour .NET fonctionne bien si vous ne souhaitez pas utiliser IronPython.
Si vous ne souhaitez pas utiliser des solutions comme Python .NET ou IronPython, il est possible d'implémenter un wrapper C++/CLI et d'utiliser des ctypes Pythons pour le charger. Par exemple:
La bibliothèque C++/CLI CallCSharp:
extern "C" {
__declspec(dllexport) void foo()
{
// here you could use managed and unmanaged code
Console.WriteLine("Hello, C# world...");
}
Le script Python:
from ctypes import cdll
lib = cdll.LoadLibrary("./CallCSharp.dll")
lib.foo()
Je recommande fortement de lire ce blog: http://pragmateek.com/if-your-plumbing-doesnt-work-youre-just-not-using-enough-pipes/#more-1745
Il gère également le problème qui survient lorsque le wrapper C++/CLI appelle du code qui se trouve dans un autre assembly (vous obtiendrez quelque chose comme une WindowsError: [Erreur -532462766] Erreur Windows 0xE0434352 de votre Python puis script).