web-dev-qa-db-fra.com

Comment charger une DLL C # en python?

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!

22
aF.

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

http://ironpython.net/

Visitez ici pour un exemple C # DLL qui est visible pour COM

5
Vivek Bernard

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.

22
Vincent

Python pour .NET fonctionne bien si vous ne souhaitez pas utiliser IronPython.

5
Warren

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).

2
anhoppe