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

cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 - 30 juil. 2004 à 21:48
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 31 juil. 2004 à 15:08
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 juil. 2004 à 22:35
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++
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
31 juil. 2004 à 14:59
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...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
31 juil. 2004 à 15:08
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++
0
Rejoignez-nous