UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

di il
13 risposte

UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

Buongiorno,

Per lavoro dovrei realizzare una GUI in Python ma devo utilizzare una serie di classi e tipi provenienti da un progetto C# di cui ho la dll. Ma onestamente non ho capito come fare.

avrei bisogno quindi di porre alcune domande:

1) Devo modicare il progetto C# dicendo espressamente cosa voglio rendere pubblico tramite dll?

2) Oppure devo importare qualche tipo di modulo da Python e dirgli di aprire la dll e da liricavarmi classi ed oggetti?

3) le chiamate await di C# in questo caso come si comportano in Python?

13 Risposte

  • Re: UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

    09/06/2023 - davide_vergnani ha scritto:


    Per lavoro dovrei realizzare una GUI in Python ma devo utilizzare una serie di classi e tipi provenienti da un progetto C# di cui ho la dll. Ma onestamente non ho capito come fare.

    Ci sono svariate strade che viaggiano in un senso inverso, ossia integrare Python in C#, ma trovo poco riguardo il contrario.

    La vera domanda è: ma è proprio necessario che i due “sistemi” (uso un termine volutamente generico e astrattissimo) si integrino l'uno dentro l'altro?

    Non sarebbe opportuno stabilire una forma di comunicazione tra le due parti software, ad esempio con un servizio di messaggistica, evitando di fonderle assieme e facendole tuttavia comunicare affinché ciascuna parte faccia il proprio compito collaborando in modo armonioso? :)

  • Re: UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

    09/06/2023 - davide_vergnani ha scritto:


    Per lavoro dovrei realizzare una GUI in Python ma devo utilizzare una serie di classi e tipi provenienti da un progetto C# di cui ho la dll. 

    Diciamo che stai tentando di fare una cosa MOOOLTO strana.

    1) Usa IronPython https://ironpython.net/ 
     che e' l'implementazione in .NET di Python, QUINDI e' in grado di usare una DLL .NET IN MODO NATIVO/diretto

    2) prova a guardarti Python.NET https://github.com/pythonnet/pythonnet 

    Ma per che strampalato lavoro lo devi fare?
    Chi sono i PAZZI che vogliono fare una cosa del genere?

    Secondo me “non sanno quello che fanno” (che Il Grande Informatico perdoni loro ;-) )

  • Re: UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

    09/06/2023 - migliorabile ha scritto:


    1) Usa IronPython https://ironpython.net/ 
     che e' l'implementazione in .NET di Python, QUINDI e' in grado di usare una DLL .NET IN MODO NATIVO/diretto

    Ci avevo pensato anche io, però io l'ho sempre visto come una via per integrare Python dentro .NET, e non il viceversa.

    Infatti, questa implementazione sfrutta il meccanismo del DLR di .NET per supportare codice “dinamico” scritto in Python.

    E' anche vero che la direzione dello sfruttamento potrebbe comunque consentire di raggiungere il risultato, ma mi preoccupa - e credo che sia limitante per questo come soluzione - il fatto che la DLL sia già pronta, fatta e finita, ovvero che non ci sia possibilità di modificare il suo codice, anche se nulla vieta di creare un nuovo programma C# che integri Python e che faccia uso della DLL esistente, trattandola come una “scatola nera”.

    Insomma, per questo ponevo la domanda sul senso di cercare una soluzione così “monolitica” a un problema…

    Resto in attesa di ulteriori dettagli dall'original poster. :)

  • Re: UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

    " dovrei realizzare una GUI in Python… " sicuramente ci sarà un motivo ma ti chiedo ugualmente perchè non fare anche la gui in c# ?

  • Re: UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

    La gui sarà fatta in Python poichè lo sviluppatore che la sta implementando, predilige usare PyQT. Non stiamo realizzando un progetto che andrà venduto, lo dobbiamo usare per noi stessi. Stiamo integrando due diverse parti una presente nella dll e l'altra è la GUI QT. 

    Per la GUI stiamo partendo da una vecchia GUI di cui abbiamo già il codice.

  • Re: UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

    12/06/2023 - davide_vergnani ha scritto:


    La gui sarà fatta in Python poichè lo sviluppatore che la sta implementando, predilige usare PyQT. Non stiamo realizzando un progetto che andrà venduto, lo dobbiamo usare per noi stessi. Stiamo integrando due diverse parti una presente nella dll e l'altra è la GUI QT. 

    Ok, però quali responsi hai da dare rispetto a tutte le proposte che sono state fornite? :)

  • Re: UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

    Ok, 

    sinceramente credo che ironPython, non faccia proprio al caso mio. Da quel che ho capito non è integrabile con QTPy.

    Sto invece provando ma ancora senza grande successo, pythonnet. Importando il modulo clr, riesco ada aprire le dll che volevoa aprire e riesco ad, tra virgolette, instanziarne le classi. Vi riporto, velocemnete un tentativo di lanciare un metodo, dove si vede che il Python non vede le dll di sistema come invece fa C# (infatti, nell'esempio, non vede System.ComponentModel.dll):

    
    >>> res = box.SetSerial('COM5', 10, pcprot.CCB2);
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    System.TypeLoadException: Could not load type 'System.ComponentModel.Component' from assembly 'System.ComponentModel.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
    at WiredBoxLib.SerialPortAdapter.get_PortName()
    at WiredBoxLib.WiredBox.SetSerial(String port, Int32 txinterval, PC_PROTOCOL protocol)
    
  • Re: UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

    Con iron Python non ha senso usare QT, essendo in AMBIENTE dot NET DEVI USARE quello che gia' esiste per tale ambiente, quindi WPF (Windows presentation Fundation) o altro framework dot NET.

    Come ‘programmatore professionista’ CI SI ADATTA ALL'AMBIENTE, non si adatta l'ambiente ALLE PROPRIE preferenze ;-)

  • Re: UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

    Non devo fare io la GUI, io mi occupo di integrare la dll in pyton. La realtà, che lo sviluppatore GUI vorrebe adattare una vecchia GUI andando ad integrare le funzionalità di questa dll.

  • Re: UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

    13/06/2023 - migliorabile ha scritto:


    Come ‘programmatore professionista’ TI ADATTI ALL'AMBIENTE, non adatti l'ambiente alle TUE preferenze ;-)

    …e qualora non fosse possibile nessuna delle due cose, quantomeno si sceglie lo strumento più adatto alle preferenze e all'ambiente. :)

    13/06/2023 - davide_vergnani ha scritto:


    Non devo fare io la GUI, io mi occupo di integrare la dll in pyton. La realtà, che lo sviluppatore GUI vorrebe adattare una vecchia GUI andando ad integrare le funzionalità di questa dll.

    Non vorrei dire, ma credo che - per il benessere di quel software e di chi dovrà manutenerlo - sarebbe opportuno prendere spunto dall'esistente riscrivendo una parte del programma e utilizzando possibilmente la stessa piattaforma/linguaggio, sia per la logica che per la GUI, a questo punto.

    In caso contrario, oltre a generare un accrocchio, si possono presentare problematiche serie, nell'immediato ma anche nel futuro.

    Ma è solo il mio parere…

  • Re: UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

    perchè non “portare anche c#” in python con questo o altri simili servizi : https://www.developerfusion.com/tools/convert/csharp-to-python/ ?, magari fai sapere come và se lo usate…

    per convertire eventualmente l'intero progetto C# in iron python ti direi di provare ad usare SharpDevelop (fino alla versione 4.4  , gratuito ed opensource) https://sourceforge.net/projects/sharpdevelop/files/SharpDevelop%204.x/4.4/  

  • Re: UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

    @gian82, secondo me e' piu' semplice sostituire il programmatore che non sa programmare in C# e usa Python (in n-mila lustri non ho MAI visto applicazioni industriali implementate in Python, escludendo l'ambito del Machine Learning) che volersi “spaccare la testa” nel tentativo (fallimentare) di far convivere, a STRETTO CONTATTO due sistemi che non hanno motivo di stare assieme.

    C'e' un'unico tipo di integrazione che ho visto fare, ho fatto e che si puo' fare perche' PREVISTO: librerie binarie scritte in C (NON C++) CON qualcosa altro (Java, Python, Julia, C#, LISP, Prolog, e chi piu' ne ha, piu' ne metta).

    Anche quello di convertire qualcosa in un linguaggio in un'ALTRO linguaggio lo propongono in tanti, ho tentato di farlo MA NON FUNZIONA!

    Il motivo e' BANALE: NON E' un problema di linguaggio di programmazione, perche' piu' o meno la sintassi si puo' convertire, e'  un problema di LIBRERIE! 

    NON BASTA convertire la List Java nell'equivalente C#, tanto per fare un esempio, E' NECCESSARIO CHE List FUNZIONI COME IN Java perche' chi ha scritto il codice in Java ragionava alla Java.

    L'unico caso in cui sono riuscito a convertire ed usare una libreria Java (Apache Xerces) in .NET (con codice Java convertito in C#) e' stato perche' c'era l'intero SDK Java disponibile in .NET e IKVM era in grado di convertire perfettamente il bytecode Java in bytecode .NET. 

    Nota: IKVM e un progetto ANCORA ATTIVO a quanto vedo! Ottimo!

    https://github.com/ikvmnet/ikvm

    Quindi, @davide, secondo me devi puntare i piedi con chi di dovere: 

    SE QUI tutti ti stiamo dicendo, in un modo o nell'altro, che questa integrazione ‘non sa da fare ne oggi ne mai’ (come disse qualcuno di nostra conoscenza) ed abbiamo N-MILA anni di esperienza, FORSE, dico FORSE, c'e' qualcosa di fondamentalmente sbagliato nell'idea ;-)

    Quindi:

    1. o TUTTO in Python
    2. oppure TUTTO in .NET C#
    3. soluzioni ibride: NO!
  • Re: UTILIZZARE DLL GENERATA D PROGETTO C# IMN PYTHON

    Concordo su Ikvm, gran progetto :-) , e se parliamo degli stessi tempi ricordo come xerces e xalan fossero , a mio avviso , molto superiori alle librerie microsoft del tempo ,

    però penso che potrebbero provare ad usare un convertitore per portare tutto su python ( anche se personalmente porterei tutto su c# :-)  )

Devi accedere o registrarti per scrivere nel forum
13 risposte