BeginUpdateResource fail

zod331 Messages postés 9 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 8 mai 2011 - 8 mai 2011 à 01:42
zod331 Messages postés 9 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 8 mai 2011 - 8 mai 2011 à 13:46
bonsoir;

L'appel de la fonction BeginUpdateResource marche tres bien en temp normal mais quand
je fai appel a GetOpenFileName, BeginUpdateResource ne fonctionne plus.

SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(32649)));
LPOPENFILENAME ofn = new OPENFILENAME;
memset(ofn, 0, sizeof(OPENFILENAME));
szIFileName[0] = '\0';
ofn->lStructSize = sizeof(OPENFILENAME);
ofn->hwndOwner = hDlg;
ofn->lpstrFile = szIFileName;
ofn->lpstrFile[0] = '\0';
ofn->nMaxFile = MAX_PATH;
ofn->lpstrFilter = "Icon Files (*.ico)\0*.ico\0\0";
ofn->Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if(GetOpenFileName(ofn)){
hIcon = ExtractIcon(hInst, szIFileName, 0);
SendMessage(GetDlgItem(hDlg, IDC_ICON_EXE), STM_SETICON, (WPARAM)hIcon, (LPARAM)0);
DestroyIcon(hIcon);
}
delete ofn;

Merci de vos reponses

2 réponses

mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
8 mai 2011 à 12:43
tu as regardé l'erreur retournée par GetLastError ?

la plupart du temps, quand le handle retourné par beginupdateresource est égal à NULL, c'est que
- soit le fichier n'existe pas (erreur dans le nom ou chemin erroné)
- soit que le fichier est en cours d'execution
- soit que le fichier n'est pas un fichier "exe windows" (exe, dll, scr, ..)
0
zod331 Messages postés 9 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 8 mai 2011
8 mai 2011 à 13:46
J'ai trouver la solution a mon probleme, c'etait une histoire de repertoire
GetOpenFileName change le repertoire de base donc le chemin de mon stub etait plus valid
Avec GetCurrentDirectory et SetCurrentDirectory les probleme et resolu.

char temp[MAX_PATH];
GetCurrentDirectory(MAX_PATH, temp);
if(GetOpenFileName(ofn)){
hIcon = ExtractIcon(hInst, szIFileName, 0);
SendMessage(GetDlgItem(hDlg, IDC_ICON_EXE), STM_SETICON, (WPARAM)hIcon, (LPARAM)0);
DestroyIcon(hIcon);
}
SetCurrentDirectoryA(temp);
delete ofn;
0
Rejoignez-nous