Come caricare un C # dll in Python?
-
21-09-2019 - |
Domanda
come posso caricare un c # dll in Python?
Devo mettere un po 'codice aggiuntivo nei file C #? (Come l'esportazione in file c ++)
Non voglio usare IronPython. Voglio importare un modulo di Python!
Soluzione
Questo è quello di rispondere alla seconda parte della tua domanda Prova a fare la DLL COM visibile.
utilizzando il
[ComVisible(true)]
Ok IronPython è un implemenatation Netto del linguaggio Python La tecnologia sta per utilizzare il DLR di .NET 4.0 quando si arriva così IronPython avrà più Dinamismo (che è una parola). (In inglese, se sei un guru Python, vi sentirete più a casa quando si utilizza IronPython)
Così si può anche scegliere IronPython, se si fa questo si può saltare la parte visibile COM. Dal momento che sia (C #, Python ferro) sono sotto .Net
Altri suggerimenti
Il pacchetto Python for.NET e l'implementazione di Python IronPython ora funzionano allo stesso modo.
Esempio di MyDll.dll
C # DLL:
import clr
clr.AddReference('MyDll')
from MyNamespace import MyClass
my_instance = MyClass()
questo post per ulteriori dettagli.
Python for .NET funziona bene se non si desidera utilizzare IronPython.
Se non si desidera utilizzare soluzioni come Python .NET o IronPython è possibile implementare un C ++ / CLI involucro e utilizzare ctypes Pythons per caricarlo. Ad esempio:
La libreria CallCSharp C ++ / CLI:
extern "C" {
__declspec(dllexport) void foo()
{
// here you could use managed and unmanaged code
Console.WriteLine("Hello, C# world...");
}
Lo script Python:
from ctypes import cdll
lib = cdll.LoadLibrary("./CallCSharp.dll")
lib.foo()
Sono fermamente vi consiglio la lettura di questo blog: http://pragmateek.com/if-your-plumbing-doesnt-work-youre-just-not-using-enough-pipes/#more-1745
E 'gestisce anche il problema che si verifica quando il C ++ / CLI codice chiamate wrapper che è in un altro assembly (si otterrebbe qualcosa come un WindowsError: [Errore -532.462.766] di Windows Error 0xE0434352 dal vostro script Python allora).