Debug - Release - Probleme à l'execution...

Signaler
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonsoir,

Voici un morceau de code qui recupere le chemin de l'application et change l'extention en .ini (Dites moi si mon code est bien 'codé')

LPTSTR lpFichierIni;

// On recupere le chemin du fichier ini (dans le repertoire de l'application)
lpFichierIni = new char[MAX_PATH];
GetModuleFileName(NULL, lpFichierIni, lstrlen(lpFichierIni));
lstrcpyn(lpFichierIni, lpFichierIni, lstrlen(lpFichierIni) - 3);
lstrcat(lpFichierIni, ".ini");
// Pour le debug en mode release.
MessageBox(hwndDlg, lpFichierIni, "Fichier INI", MB_OK);

Le probleme c'est qu'en compilant en mode Debug, pas de probleme mais en mode Release, à l'execution, le chemin est tronqué ???

j'ai du style C:\PROGRAMM FILE .ini

Une autre petite question en passant :
J'emploi ici le mot clef new qui est du C++, comment puis je faire pour faire de la programmation C/Win32, utiliser les malloc ou les globalAlloc ???

Merci pour vos réponses et bonnes soirée.

Matt...

3 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
char szfl[264], *c;
c = szfl + GetModuleFileName(0, szfl, 264);
c pointe donc sur le null final
*(c-3) 'i'; *(c-2) 'n'; *(c-1) = 'i';

Alloc memoire se fait par HeapAlloc ou VirtualAlloc.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonjour,

Merci pour ta réponse.
En fait cela venait du lstrlen (mauvaise utilisation)
J'ai donc fait un mix des deux :

TCHAR lpFichierIni[MAX_PATH];
GetModuleFileName(NULL, lpFichierIni, MAX_PATH);
lpFichierIni[lstrlen(lpFichierIni) - 3] = 'i';
lpFichierIni[lstrlen(lpFichierIni) - 2] = 'n';
lpFichierIni[lstrlen(lpFichierIni) - 1] = 'i';

Et voila,

par contre j'utilisais LPTSTR mais je trouve que l'allocation memoire est un peu lourde avec HeapAlloc ou VirtualAlloc pour des chaines de caracteres. Ici pas de probleme car la chaine est fixe mais si on veut faire des chaines dynamiques pas moyen d'y echapper ???

Merci encore et bonne journée,

Matt...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
API expose ces 2 fonctions pour la gestion memoire, tout autre moyen devra par force finir par un appel a ces fonction alors autant les employer directement.
Lire Richter, reference en la matiere:
http://brunews.free.fr/brunews/download/JR4.zip
http://brunews.free.fr/brunews/download/JR4Sources.zip

Regarde bien ton code et compare au mien, tu ne vois pas que j'ai acces direct aux octets a modifier sans recalcul d'adresse ?
Faut toujours viser la performance.

ciao...
BruNews, Admin CS, MVP Visual C++