Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633

    [C] lanciare un eseguibile...particolare

    Ciao a tutti,
    spero di riuscire a spiegarmi:
    ho un grosso programma in C che sembra funzionare correttamente, quello che fa è prendere dei dati da file di testo ed elaborarli.
    Quando lo lancio da Visual C++, o cliccando sull'eseguibile non ho alcun problema.

    I problemi nascono quando cerco di lanciare il file da un foglio Excel.
    La chiamata è giusta:

    Shell("percorso\programma.exe")

    ma, il programma si interrompe e parte il debug...
    mi sembra d'aver capito che il programma exe viene sì lanciato correttamente, ma
    questo poi non riesca a caricare i dati dai file di testo!
    non capisco perchè!! i file ci sono.

    Aggiungo che, nel programma non c'è alcun controllo sull'apertura corretta dei file di testo, (visto che è previsto che ci siano sempre), e il problema mi viene segnalato proprio al primo fscanf.
    Qualcuno mi può illuminare?
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  2. #2
    secondo me il problema sta nella chiamata ai file di testo.

    utilizzi un patch relativo?

    se [SI] prova a cambiarlo con un patch assoluto.
    ...Terrible warlords, good warlords, and an english song

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    grazie Johnny per la risposta,
    in effetti sì, uso path relativi, il problema però è che DEVO
    usare un path relativo; infatti mi occorre poter spostare l'eseguibile in cartelle diverse (in cui però ci sono sempre i file di testo che cerco)...non so se mi sono spiegato...
    insomma:

    finp = fopen("C:\\directory\\file_testo.txt","r");

    non lo posso usare perchè non conosco a priori le directory...

    Mi servirebbe un modo in C per recuperare il PATH dell'eseguibile,
    avete qualche idea?
    o soluzioni alternative?
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    up
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    niente?

    ci sarà un modo per recuperare il path della directory che contiene l'eseguibile!...o no?
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    se il programma è un MZ /PE/NE/LE puoi usare GetCurrentDirectory oppure guardarti le variabili d'ambiente passata al programma... che dovrebbero contenere tutti i path e la directory corrente.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    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"
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  8. #8
    Non GetCurrentDirectory ma GetModuleFileName è la funzione che dice dove si trova un dato eseguibile, la working directory potrebbe benissimo essere un'altra.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    GetCurrentDirectory però viene settata da excel o da chi lancia il tuo exe ... quindi puo benissimo metterci anche "n:\ciao\ciao a tutti\"....

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    SIII''

    GetModuleFileName funziona!!
    questo è lo scheletro del codice che ho usato:

    codice:
    #include <stdio.h> 
    #include <string.h> 
    #include <stdlib.h>
    #include <math.h>
    #include <windows.h>
    
    char DirText[500];
    char stringa[50];
    char *appoggio;
    
    int main(){ 
    	FILE *fpt;
    	GetModuleFileName(NULL, DirText, 500);
    
    	appoggio = strrchr(DirText,'\\');
    	DirText[(strlen(DirText)-strlen(appoggio))+1]='\0';
    	strcat(DirText,"punctin.txt");
    
    	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);
    	}
    
    	getchar();
    
    	return 0; 
    }
    giusto per imparare qualcos'altro:


    1)che significa programma MZ /PE/NE/LE ?
    2)come faccio a guardare le variabili d'ambiente passate al programma?
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

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 © 2024 vBulletin Solutions, Inc. All rights reserved.