come posso caricare un C# dll in python?Come caricare una DLL in C# in python?
Devo inserire del codice aggiuntivo nei file C#? (come l'esportazione in file C++)
Non voglio usare IronPython. Voglio importare un modulo in Python!
come posso caricare un C# dll in python?Come caricare una DLL in C# in python?
Devo inserire del codice aggiuntivo nei file C#? (come l'esportazione in file C++)
Non voglio usare IronPython. Voglio importare un modulo in Python!
Questo è per rispondere alla seconda parte della domanda Provare a rendere visibile la DLL COM.
utilizzando il
[ComVisible(true)]
Ok IronPython è un implemenatation .net del linguaggio Python La tecnologia sta per utilizzare il DLR di .NET 4.0 quando arriva così IronPython avrà più Dinamismo (è quella parola). (In inglese se sei un guru Python, ti sentirai più a tuo agio quando usi IronPython)
Quindi potresti scegliere IronPython, se lo fai puoi saltare la parte visibile di COM. Dal momento che sia (C#, Python ferro) sono sotto .Net
Ora che ho visto Ironpython ho capito di cosa si trattava. Non lo voglio Voglio importare un modulo in python: P –
Significa importare (porta) il codice C# in Python o importare una dll C# in Python –
Importare e utilizzare le funzioni da una D # C in Python –
Python for .NET funziona bene se non si desidera utilizzare IronPython.
Il pacchetto Python for.NET e l'implementazione Python IronPython ora funzionano allo stesso modo.
Esempio per un C# DLL MyDll.dll
:
import clr
clr.AddReference('MyDll')
from MyNamespace import MyClass
my_instance = MyClass()
Vedere this post per maggiori dettagli.
intall prima con 'pip3 install pythonnet' – Felix
Se non si desidera utilizzare soluzioni come Python .NET o IronPython, è possibile implementare un wrapper C++/CLI e utilizzare Pythons ctypes per caricarlo. Per 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...");
}
Il Python script:
from ctypes import cdll
lib = cdll.LoadLibrary("./CallCSharp.dll")
lib.foo()
sono fermamente recomment leggere questo blog: http://pragmateek.com/if-your-plumbing-doesnt-work-youre-just-not-using-enough-pipes/#more-1745
Gestisce anche la problema che si presenta quando il wrapper C++/CLI chiama il codice che si trova in un altro assembly (si otterrebbe qualcosa come un Wind owsError: [Errore -532462766] Errore di Windows 0xE0434352 dal tuo script Python quindi).
Funziona su Mono e .NET Core? – denfromufa
Non so. E ho già abbandonato questo approccio, non ho avuto il caricamento degli assembly referenziati in esecuzione. Proverò a capire Python .NET. – anhoppe
Si potrebbe voler aggiungere un po 'di chiarimenti. Stiamo parlando di * CPython * o * IronPython *? –
Voglio importare un modulo in Python (non IronPython quindi ..) –
Hai intenzione di lottare. Una DLL C# è scritta in CIL e non è python, né è leggibile da python. Stai andando a finire fuori. NET e utilizzare IronPython o soffrire il dolore dell'uso di COM. Non c'è un modo per usare un modulo Python nativo? –