我一直試圖做一些所謂簡單,但像往常一樣,它不是爲我工作,在可疑的情況。我想要做的只是在屏幕上加載一個位圖並保存在屏幕上。 (彈出)窗口將沒有控件,不能移動,並且只能通過它的泵來處理WM_PAINT;像一個閃屏。C++的LoadImage錯誤獨家發佈模式
代碼編譯良好,並且在調試模式下運行正常,但是當我切換到釋放模式時LoadImage()
總是返回NULL
並且其他一切都因此失敗。這是我在這一方法上花費的第四個小時,我認爲該是尋求幫助的時候了。 我檢查了未初始化的內存,並可以確保每個使用的類成員初始化爲0
,並且有理由相信這不是問題。 我會發佈下面的代碼,並且非常感謝您的幫助。
我寧願只有做到這一點使用WinAPI的,如果可能的話,因爲我不會有這個功能其他地方在此應用中使用。當然,我仍然對想法持開放態度,但很可能我只是犯了一個愚蠢的錯誤。再次,謝謝!
int CreateWindowWithUserFormat()
{
SIZE BMSize = {0};
LoadedBitmap = (HBITMAP) LoadImage(NULL,
L"Art\\Splash_Screens\\1.bmp", IMAGE_BITMAP,
NULL, NULL, LR_LOADFROMFILE);
if(!LoadedBitmap) {
MessageBox(NULL,
L"Error loading image to void * HBITMAP",
L"Error Loading Splash", NULL);
}
ScreenDevCtxt = CreateCompatibleDC(NULL);
if(!ScreenDevCtxt) {
//Failure
}
ReplacedObject = SelectObject(ScreenDevCtxt, (HGDIOBJ) LoadedBitmap);
if(ReplacedObject == NULL || ReplacedObject == HGDI_ERROR) {
//Failure
}
if((!GetBitmapDimensionEx(LoadedBitmap, &BMSize)) ||
BMSize.cx == 0 || BMSize.cy == 0) {
//Failure, try alternate:
BITMAP Bm = {0};
if((!GetObject(LoadedBitmap, sizeof(Bm), &Bm)) ||
Bm.bmWidth == 0 || Bm.bmHeight == 0) {
MessageBox(NULL,
L"Error getting bitmap size; loading aborted.",
L"Error Loading Splash Image", NULL);
}
// Alternate success; use these as size.
BMSize.cx = Bm.bmWidth;
BMSize.cy = Bm.bmHeight;
}
{
RECT WindowSize = {0};
WinHelper.CenterRectInScreen(WindowSize, BMSize.cx, BMSize.cy);
if(!Create(L"TitleName",
WS_POPUPWINDOW | WS_EX_TOPMOST,
WS_EX_TRANSPARENT,
WindowSize.left, WindowSize.top,
WindowSize.right, WindowSize.bottom,
NULL, NULL))
{
return false;
}
return true;
}
}
這也許值得一提的是,這個運行在它自己的線程。當線程包裝器收到來自應用程序的信號並且經過了一段時間(我相信5秒鐘)後,該線程包裝器負責銷燬該窗口。我相當肯定這不是問題的根源,但是誰知道;我沒有想法。 該問題僅出現在發佈模式中,是的,發佈模式仍然可以訪問該文件(Art\\Splash_Screens\\1.bmp
)。我能做些什麼來解決這個問題?
更新 好,只用了之後這幾分鐘的時間來實現的路徑是錯誤... 我仍然不知道爲什麼,但顯然,如果我們採取了中間正常工作直接在可執行文件旁邊粘貼"1.bmp"
。感謝你們。
您的圖片加載路徑看起來相對於您的cwd。你確實在你的可執行文件下面部署了圖像?或者調試版本部署到「正確」的位置,並且發佈版本不是那麼正確? – 2013-04-28 22:07:53
@JonathonReinhart爲了驗證,我直接將整個「藝術」文件夾直接複製到發佈可執行文件的位置。 – 2013-04-28 22:08:11
@JonathonReinhart好吧,你說得對 - 對我來說沒有多大意義,但將1.bmp移出中間目錄並將其直接放在.exe旁邊可以使其正常工作。我可以接受評論作爲答案嗎? – 2013-04-28 22:22:40