inanzitutto grazie $$$,
ho qualche domanda da farti sul tuo intervento (sono un po' ignorante in materia):
1)che significa programma MZ /PE/NE/LE ?
2)come faccio a guardare le variabili d'ambiente passate al programma?

dopo questa premessa, ho fatto così (per prova):

codice:
#include <windows.h>

char DirText[500];
...

	GetCurrentDirectory(500,DirText);
	printf("\n%s\n",DirText);
	strcat(DirText,"\\punctin.txt");
	printf("\n%s\n",DirText);
	fpt = fopen(DirText,"r");
	if(fpt==NULL) printf("\n\nFILE NON PRESENTE NELLA DIRECTORY DELL'ESEGUIBILE");
	else{
		fscanf(fpt,"%s",stringa);
		printf("\n\n%s",stringa);
		fclose(fpt);
	}
...
bene.
lancio da VC++: tutto ok!
lancio cliccando sull'eseguibile: tutto ok!
lancio da un foglio Excel (nella stessa cartella dell'eseguibile)usando:

codice:
Sub LanciaEXE()
    Shell (ThisWorkbook.Path & "\prova_dati_da_file.exe ")
End Sub
non trova il file e, ora la CurrentDirectory è:
F:\Documents and Settings\William\Documenti

che assolutamente non centra nulla con la directory dell'eseguibile!!
(che invece è: C:\Documents and Settings\William\Desktop\IER)

perchè?? che diavolo fa Excel?
penso che quindi non avrei bisogno nemmno del GetCurrentDirectory
se riuscissi a capire perchè mi rida quella directory.

per favore qualcuno mi sveli questo "arcano"