View Full Version : [python/C#] Accedere a un modulo scritto in C# da python
ingframin
12-09-2011, 12:53
Buona sera,
Ho l'esigenza di caricare in python un modulo scritto in C#.
Come si fa? Se compilo il modulo come dll posso usare ctypes?
Se si cosa cambia rispetto a una dll scritta in C?
C'e' un'atra via usando qualcosa come le estensioni per windows di Mark Hammond?
cdimauro
12-09-2011, 13:14
Python for .NET (http://pythonnet.sourceforge.net/)
Funziona davvero molto bene.
Unico limite: le classi C#/.NET non riescono a vedere i membri di una classe Python. Ed è il motivo per cui sono passato ad IronPython per un mio progetto.
Ma se non hai quest'esigenza (io sto lavorando con WPF), allora sei a posto. :cool:
ingframin
12-09-2011, 13:46
ma posso installarci su moduli esterni?
Mi spiego bene.
Sto facendo un programma che prende dei dati da dei file id testo e riempire un file word.
Al momento sto usando le estensioni per windows di mark hammond e riesco a fare praticamente tutto.
Ora...
Mi sono accorto che scorrere un documento word grosso e' terribilmente lento e pure abbastanza complicato, quindi ho pensato:
1) mi scrivo la libreria che si interfaccia con word in c#, cosi' tra gli altri non devo tradurmi gli esempi che trovo su msdn
2) carico questa libreria nel mio programma python e la uso.
Non posso usare iron python perche' non ci gira pyVISA e mi sa neanche numpy, scipy, matplotlib piu' le varie schifezze scritte da Agilent in C che ho dovuto wrappare fin ora :s.
Comunque ora mi cerco la documentazione, grazie per la dritta ;)
cdimauro
12-09-2011, 19:24
Ti spiego brevemente cos'è Python for .NET e come funziona.
E' lo stesso identico Python (CPython) che usiamo normalmente, a cui semplicemente si aggiunge una DLL (che fa da bridge col mondo .NET) e una libreria (che s'imposta come modulo) compilati rispettivamente per la versione di (C)Python che utilizzi, e quella di .NET (ad esempio la 4.0).
Con questa libreria puoi importare le librerie .NET e usare classi e funzioni / metodi come se fossero oggetti nativi di CPython. Lato .NET, come dicevo, non puoi vedere i membri di una classe Python, ma i tipi fondamentali di Python vengono convertiti tranquillamente.
In pratica non puoi fare binding di oggetti CPython dentro istanze di classi .NET, e non puoi impostare callback di CPython su oggetti .NET.
ingframin
13-09-2011, 19:02
Grazie dell'aiuto :)
Purtroppo il collo di bottiglia è proprio word, quindi non ho risolto niente.
Non mi resta che pazientare il tempo necessario :muro:
cdimauro
14-09-2011, 06:53
Capito.
Una piccola, ma importante, correzione: puoi utilizzare funzioni/metodi di Python come delegate e per gli eventi.
L'unica cosa che, al momento, sembra rimanere fuori è il binding dei membri di una classe Python con gli oggetti .NET.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.