Я уже много времени мучаюсь с проблемой - при создании приложения с главным окном в виде диалога из пустого проекта (без всяких stdafx и т.д.), оно просто не работает. То есть запускается и сразу закрывается. общий вид кода такой: PHP: int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,MainWnd); return 0; } INT_PTR CALLBACK MainWnd(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { return (INT_PTR)FALSE; } 1)В отладчике проверял - FindResourceEx(), вызываемый DialogBox() возвращает ноль при поиске ресурса диалога. 2)Этот ресурс ЕСТЬ 3)Такой бодяги нет при создании проекта с stdafx Пожалуйста помогите, я уже просто зае....ся
- выдал отладчик студии В общем похоже что в DialogBox передается левый hInstance (наверное из - за рандомного базового адреса), как это можно починить?
ntldr вот проект от VS2008 в котором главная форма диалог из ресурсов и одна кнопка.. компилится и работает =). писался тоже из пустого проекта ручками. http://www.multiupload.com/1OI5J94IWZ ссыль на архив с проэктом Code: INT_PTR CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_COMMAND: switch (wParam) { case IDC_BUTTON1: MessageBox(hwndDlg,L"Тест",L"!!!!!",MB_OK); return INT_PTR(TRUE); } case WM_INITDIALOG: { return INT_PTR(TRUE); } case WM_CLOSE : EndDialog(hwndDlg,wParam); return INT_PTR(TRUE); case WM_DESTROY : EndDialog(hwndDlg,wParam); return INT_PTR(TRUE); } return 0; } int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { DialogBoxParam(hInstance, MAKEINTRESOURCE (IDD_DIALOG1), HWND_DESKTOP, (DLGPROC)DialogProc, 0); } в проекте всего 2 функции =)
Я уж не знаю, как так получилось, но подозреваю, что дело в том, что у тебя главная функция WinMain, а у меня какая-то левая. Хотя я уже решил проблему, прописав в свойствах проекта фиксированный адрес базы 0x400000 и соответственно таким образом вызвал диалог: PHP: int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { DialogBox((HINSTANCE)0x400000,MAKEINTRESOURCE(IDD_DIALOG1),0,MainWnd); return 0; }
ntldr не делай так лучше пропиши тогда уж hInstance=GetModuleHandle(NULL); хистанс у тебя не правильный из-за не правильной главной функции она должна называться WinMain (CRT потом сам сделает все что нужно - я про юникод) а вообще http://msdn.microsoft.com/en-us/library/ms644996(v=VS.85).aspx