ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
Студия и диалоговые приложения |

30.03.2010, 23:47
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
Студия и диалоговые приложения
Я уже много времени мучаюсь с проблемой - при создании приложения с главным окном в виде диалога из пустого проекта (без всяких 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
Пожалуйста помогите, я уже просто зае....ся 
|
|
|

30.03.2010, 23:58
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
Первый этап обработки исключения в "0x7c9102f6" в "lab14.exe": 0xC0000005: Нарушение прав доступа при чтении "0x0dc7f9d4".
- выдал отладчик студии
В общем похоже что в DialogBox передается левый hInstance (наверное из - за рандомного базового адреса), как это можно починить?
|
|
|

31.03.2010, 08:33
|
|
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме: 1035284
Репутация:
52
|
|
ntldr вот проект от VS2008 в котором главная форма диалог из ресурсов и одна кнопка.. компилится и работает =). писался тоже из пустого проекта ручками.
http://www.multiupload.com/1OI5J94IWZ ссыль на архив с проэктом
Код:
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 функции =)
Последний раз редактировалось transserg; 31.03.2010 в 08:37..
|
|
|

31.03.2010, 09:23
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
Сообщение от transserg
ntldr вот проект от VS2008 в котором главная форма диалог из ресурсов и одна кнопка.. компилится и работает =). писался тоже из пустого проекта ручками.
http://www.multiupload.com/1OI5J94IWZ ссыль на архив с проэктом
Код:
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; 31.03.2010 в 09:26..
|
|
|

31.03.2010, 10:16
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
ntldr не делай так
лучше пропиши тогда уж hInstance=GetModuleHandle(NULL); хистанс у тебя не правильный из-за не правильной главной функции она должна называться WinMain (CRT потом сам сделает все что нужно - я про юникод)
а вообще http://msdn.microsoft.com/en-us/library/ms644996(v=VS.85).aspx
|
|
|

31.03.2010, 11:14
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
Сообщение от Gar|k
ntldr не делай так
лучше пропиши тогда уж hInstance=GetModuleHandle(NULL); хистанс у тебя не правильный из-за не правильной главной функции она должна называться WinMain (CRT потом сам сделает все что нужно - я про юникод)
а вообще http://msdn.microsoft.com/en-us/library/ms644996(v=VS.85).aspx
вот вот, я так же хотел сделать 
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|