2010-07-07 17 views
0

EDIT: J'ai ajouté quelques lignes supplémentaires du programme à l'extrait de code ci-dessous.Erreur de fichier introuvable avec LoadImage() (Windows)

J'ai la ligne suivante de code dans un programme

BITMAP BMP; 
HBITMAP hBMP; 

hBMP = (HBITMAP)LoadImage(GetModuleHandle(NULL), "Test.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE); 
if (!hBMP) return 1; 

GetObject(hBMP, sizeof(BMP), &BMP); 

et quand je lance le programme, il se bloque. J'ai utilisé GetLastError(), qui a renvoyé 2/FILE_NOT_FOUND, mais le fichier ("Test.bmp") se trouve dans le dossier du fichier .exe. Quelqu'un peut-il indiquer ce qui ne va pas avec la ligne de code (ou si l'erreur n'est pas dans cette ligne)?

Répondre

0

vous devriez essayer d'utiliser le chemin complet de votre application.

De plus, les arguments main() contiennent le chemin d'application actuel, ce qui vous permet de l'ajouter à votre chaîne.

0

Votre image vit dans un chemin temporaire Je crois que l'exécution se passe ...

Environnement :: GetEnvironmentVariable ("TEMP") + "\ Button.bmp";

1

Courez-vous peut-être dans le débogueur, comme démarré à partir de l'IDE? Le répertoire de travail actuel peut être différent de ce que vous pensez qu'il est.

EDIT: Utilisation de Process Explorer, de Sysinternals, vous pouvez voir que le répertoire de travail en cours est celui qui contient votre fichier de solution, si vous utilisez Visual Studio, et non pas dans le répertoire où vos fichiers binaires sont créés.

3

Utilisez GetCurrentDirectory pour savoir quel répertoire est le répertoire par défaut, il se peut que ce ne soit pas l'emplacement de l'exécutable. Je suggère d'utiliser le chemin complet de votre fichier.

+0

J'ai essayé de le changer à "C: \ Test.bmp" (et de mettre une copie du fichier là), et GetLastError() renvoie 0, mais le programme se bloque toujours quand j'essaie d'accéder à quelque chose comme la largeur du bitmap. –

+0

@ Keand64: La fonction LoadImage renvoie uniquement un handle au bitmap. Pour obtenir des informations sur le handle, utilisez la fonction GetObject. Si vous montrez plus de code, ce serait utile. –

+0

Oui, j'avais une fonction GetObject(), je ne pensais tout simplement pas que c'était pertinent à la question à l'époque. Maintenant, je l'ai ajouté à l'extrait de code que j'ai écrit. –