PDA

Visualizza la versione completa : [C]&[PASCAL] passare valori tra programmi


zaion
25-11-2002, 17:10
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

claudibus
25-11-2002, 19:00
Architettura/Sistema Operativo?

zaion
30-11-2002, 20:25
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?

claudibus
30-11-2002, 20:45
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





// 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

claudibus
30-11-2002, 20:52
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)

claudibus
30-11-2002, 20:54
E naturalmente anche per Dos/win c'Ŕ la possibilitÓ di usare shared memory per risolvere questo problema.

Loading