Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di zaion
    Registrato dal
    Mar 2002
    Messaggi
    258

    passare valori tra programmi

    E' da un po' che ci penso ma non sono giunto a nessuna conclusione!!!

    Io ho creato due programmi:
    -uno in c
    -e l'altro in pascal

    Voglio chiamare dal programma in c il programma in pascal e che
    questo ultimo quando termina mi ritorni dei valori.
    I valori in questione sono di tipo booleano ma può andare bene anche
    un INT o un CHAR.

    Naturalmente Il passaggio dei valori non può avvnire tramite file.

    E' urgente anche se un po' complicato da risolvere su due piedi.

    grazie

    By Zaion
    bye bye

  2. #2
    Architettura/Sistema Operativo?

  3. #3
    Utente di HTML.it L'avatar di zaion
    Registrato dal
    Mar 2002
    Messaggi
    258
    OS?

    -fa lo stesso: -dos
    -windows
    -linux

    anche se forse sarebbe meglio windows perchè il programma si aspetta di trovare un particolare file system.

    Cosa intendi per architettura e cosa può influire sul passaggio dei dati tra due programmi?
    bye bye

  4. #4
    influisce parecchio, soprattutto se stiamo parlando di interfacciare linguaggi diversi.
    Ad esempio, in un sistema Unix potrei pensare un sistema in cui uno dei due programmi chiede al SO una zona di shared memory e poi passa all'altro la chiave per accedervi.

    Vediamo una soluzione per DOS, ovvero con Turbo Pascal e Turbo C


    codice:
    // questo è il chiamante (CHIAMANT.C -> CHIAMANT.EXE)
    
    #include <process.h>
    #include <stdio.h>
    
    int main(int argc, char* argv[]) {
    
      if (argc > 2) {
        int r = spawnl(P_WAIT, "CHIAMATO.EXE", "CHIAMATO.EXE", argv[1], argv[2], NULL);
        printf ("Risultato: %i\n", r);
      } else printf ("Uso: CHIAMANTE int int\n");
    
      return 0;
    }
    
    
    // questo è il chiamato (CHIAMATO.PAS -> CHIAMATO.EXE)
    
    
    uses DOS;
    
    var c, t1, t2, code: integer;
    
    begin
      c := ParamCount;
      if c < 2 then begin
                      writeln('Errore: numero parametri insufficiente.');
                      halt(0);
                    end;
      val(ParamStr(1), t1, code);
      writeln ('t1=',t1);
      val(ParamStr(2), t2, code);
      writeln ('t2=',t2);
      t1 := t1 + t2;
      halt (t1);
    end.
    In questo caso il chiamante richiede un servizio (la somma di due numeri) al chiamato, passando i valori su cui operare come argomenti al programma chiamato, che a sua volta restituisce il risultato come exit code.

    Risponde alle tue esigenze?

    Claudio

  5. #5
    Per Unix come già accennavo c'è la possibilità di usare le IPC, e quindi shmget, shmat (per portare la shared memory in indirizzamento), shmdt ... (vedi manpages)

  6. #6
    E naturalmente anche per Dos/win c'è la possibilità di usare shared memory per risolvere questo problema.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.