【问题标题】:File not found error with LoadImage() (Windows)LoadImage() 找不到文件错误 (Windows)
【发布时间】:2010-07-07 21:27:07
【问题描述】:

编辑:我在下面的代码 sn-p 中添加了几行程序。

我的程序中有以下代码行

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);

当我运行程序时,它崩溃了。我使用了 GetLastError(),它返回 2/FILE_NOT_FOUND,但文件(“Test.bmp”)位于 .exe 的文件夹中。有人能指出这行代码有什么问题(或者错误不在这一行)吗?

【问题讨论】:

    标签: c++ windows bitmap image-loading


    【解决方案1】:

    使用GetCurrentDirectory 找出哪个目录是默认目录,它可能不是可执行文件所在的位置。我建议使用文件的完整路径。

    【讨论】:

    • 我尝试将其更改为“C:\Test.bmp”(并将文件的副本放在那里),GetLastError() 返回 0,但当我尝试访问某些内容时程序仍然崩溃比如位图的宽度。
    • @Keand64:LoadImage 函数只返回位图的句柄。要从句柄中获取信息,请使用 GetObject 函数。如果您显示更多代码会有所帮助。
    • 是的,我有一个 GetObject() 函数,只是当时我认为它与问题无关。现在我将它添加到我编写的代码 sn-p 中。
    【解决方案2】:

    您应该尝试使用应用程序的完整路径。

    此外,main() 参数包含当前应用程序路径,因此您可以将其添加到您的字符串中。

    【讨论】:

      【解决方案3】:

      您的图像存在于我认为执行过程中的 TEMP 路径中......

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

      【讨论】:

        【解决方案4】:

        您是否在调试器中运行,可能是从 IDE 启动的?当前工作目录可能与您想象的不同。

        编辑:使用来自 sysinternals 的 Process Explorer,您可以看到当前工作目录是包含您的解决方案文件的目录,如果使用 Visual Studio,而不是创建二进制文件的目录。

        【讨论】:

          猜你喜欢
          • 2012-05-26
          • 1970-01-01
          • 1970-01-01
          • 2011-03-29
          • 2013-07-24
          • 2023-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多