Una Soluzione con due progetti (C++ e C#). Come modificare una variabile tra i due ?

di Anonimizzato28987 il
12 risposte
Ciao,
come da oggetto, nella stessa soluzione ho due progetti.
Uno scritto in C++ (RequestData) e l'altro in C# (SkyOnWing).
L'ideale sarebbe convertire il tutto in C#, ma questo non è possibile perché il codice in C++ non è da me scritto ed è anche un pochino complicato (uso di API ecc..).

Qua ho bisogno di aiuto perché si va fuori dalle mie competenze.
Avrei bisogno che:
1. avviato SkyOnWong (C#) avrei bisogno che RequestData (C++) si avvii in background
2. RequetData possa modificare una variabile che si trova in C#

Secondo la mia teoria parallela alla realtà , dichiarando una variabile pubblica in C# (per cui visibile nello stesso assembly), il programma in C++ potrebbe modificarla..
..ma questo lo dico io. Infatti da C++ se richiamo la variabile pubblica in C# (pensavo fosse sufficiente usare il namespace di C#) non la vede.

Questo per far capire la mia Soluzione in .NET:



Qualcuno sa indicarmi una strada ?
Grazie.

12 Risposte

  • Sei fuori strada. I due programmi sono processi indipendenti e possono comunicare solo con i metodi classici di comunicazione interprocesso. Ad esempio con un socket.
  • Potresti implementare un servizio WCF, anche se per lo scambio di una semplice variabile forse è sprecato
  • Ho risolto facendo scrivere i dati su un file dal programma in C++.
    L'altro (quello in C#) se lo legge ogni tot secondi aggiornando la posizione latitudine e longitudine.

    Ora però ho questo problema che in C++ io non so risolvere (che barba!).
    Ho fatto una ricerca su Internet ma non ne sono venuto a capo:

    Come si evince da immagine seguente, la latitudine ha la parte decimale abbastanza lunghina.


    1) Quando scrivo a video con
    printf("\n\n-->Lat=%f", pS->latitude);
    mi ritrovo questo nella console: "Lat=43.825233"
    con troncata la parte decimale.

    2) Quando scrivo nel file con
     MyFile << ("Lat=%f", pS->latitude);
    mi ritrovo questo nel file: 43.8252
    e non solo è troncata la parte decimale, ma non c'è la scritta "Lat=".

    Mi risolvete questa (per voi) stupidata ?
  • Aggiornamento
    con "Lat=%.10f" sono riuscito ad aumentare i decimale su console.
    Rimane però il file, che purtroppo non riesco a risolvere..
  • 2 Aggiornamento:
    MyFile << "Lat=" << pS->latitude << "\n";
    Mi scrive "Lat=43.8252"
    ma sempre troncato... come dargli 10 decimali ?
  • RSOLTO:
    MyFile << "Lat=" << std::setprecision(10) << pS->latitude << "\n";

    Yessssssss
  • Metti un timestamp di tua scelta se usi il file, altrimenti non sai se l'altro processo è vivo
  • Weierstrass : Si giusto. Metterò all'interno del file una stringa con minuti e secondi.


    --------------------------------------------------------------------------------------------------
    Ora però, non riesco a chiudere più il processo che avvio ... eppure lo chiudo:
    public partial class Form1 : Form
        {
            Process myProcess;
            public Form1()
            {
                this.FormClosed += new FormClosedEventHandler(Form1Closed); //Quando chiudi il Form vado a chiudere il secondo processo (cioè, vorrei chiuderlo ;-) !)
                InitializeComponent();
                //Avvio servizio RequestData
                try
                {
                    myProcess = Process.Start("Release\\RequestData.exe");
                }
                catch (System.Exception other)
                {
                    MessageBox.Show(other.Message);
                }
    
            }
    
            private void Form1Closed(object sender, FormClosedEventArgs e)
            {
                MessageBox.Show("MA TI VUOI CHIUDERE maledetto processo ! ??"); 
                myProcess.Close();
            }
    Oh.. il Form si chiude, ma quel maledetto processo resta in vita !

    Dove sbaglio ?
  • Ok, da me mi faccio le domande e da me mi rispondo:

    myProcess.Kill(true);

    come da documentazione.
    Comnque è corretto come sto facendo per chiudere il processo che avevo avviato tramite il Form1 ?

    Grazie e scusatemi: ma quando quei giorni che sono in vena e inizio a programmare, devo arrivare in fondo a costo anche di fare nottata e instasare questo forum..
  • Non puoi postare mille domande diverse nello stesso thread, non si capisce nulla...nessuno ti risponde
  • Facevo per non intasare di thread il forum
  • Un forum non si intasa, semmai un thread con mille argomenti non ha senso.

    Un thread, un titolo, un argomento. E nella sezione giusta ... se parli di C++ non puoi postare in C#
Devi accedere o registrarti per scrivere nel forum
12 risposte