Прошу прощения, за глупый вопрос. ErrCode 0x08
От: anvaka Украина Yasiv
Дата: 14.06.05 10:36
Оценка:
Привет!
У меня следующая проблема.
Во время запуска приложения, без afxwin.h, главное окно не появляется.
Подробнее: Был код, в нем был включен afxwin.h по каким-то мозахистским соображениям, т.к. при этом приложение не использовало из MFC ничего. Я убрал afxwin.h, заменил на windows.h...
Однако, теперь во время вызова
hWnd = CreateWindowEx( 0,wcl.lpszClassName,AppName,
        WS_OVERLAPPEDWINDOW | WS_VISIBLE
        WndX,WndY,WndW,WndH, 
        NULL,NULL,hInst,NULL
        );

GetLastError() говорит мне об ошибке номер восемь, что соответствует
"Недостаточно памяти для обработки комманды"
Что это за грабли? Как их убрать?
Re: Прошу прощения, за глупый вопрос. ErrCode 0x08
От: aik Австралия  
Дата: 14.06.05 11:19
Оценка:
Здравствуйте, anvaka, Вы писали:

A>У меня следующая проблема.

A>Во время запуска приложения, без afxwin.h, главное окно не появляется.
A>Подробнее: Был код, в нем был включен afxwin.h по каким-то мозахистским соображениям, т.к. при этом приложение не использовало из MFC ничего. Я убрал afxwin.h, заменил на windows.h...
A>Однако, теперь во время вызова
A>
A>hWnd = CreateWindowEx( 0,wcl.lpszClassName,AppName,
A>        WS_OVERLAPPEDWINDOW | WS_VISIBLE
A>        WndX,WndY,WndW,WndH, 
A>        NULL,NULL,hInst,NULL
A>        );
A>

A>GetLastError() говорит мне об ошибке номер восемь, что соответствует
A>"Недостаточно памяти для обработки комманды"
A>Что это за грабли? Как их убрать?

Во1ых, что в wcl.lpszClassName и AppName? Класс зарегистрен?
Во2ых, перед вызовом любой API функции вызывай SetLastError(0), чтобы гарантировать что код ошибки именно от CreateWindow.
В3их, в winerror.h рядом с кодом "8" указано слово dderror. Подозреваю что это про "device driver". Ты размеры какие окну указал?
Re[2]: Прошу прощения, за глупый вопрос. ErrCode 0x08
От: anvaka Украина Yasiv
Дата: 14.06.05 11:48
Оценка:
Здравствуйте, aik, Вы писали:

aik>Во1ых, что в wcl.lpszClassName и AppName? Класс зарегистрен?

Класс зарегестрирован, wcl.lpszClassName == "Class_NAME";
AppName == "My Application"

aik>Во2ых, перед вызовом любой API функции вызывай SetLastError(0), чтобы гарантировать что код ошибки именно от CreateWindow.

Код именно от CreateWindow(); Проверял в отладке:
err, hr

aik>В3их, в winerror.h рядом с кодом "8" указано слово dderror. Подозреваю что это про "device driver". Ты размеры какие окну указал?


WndW=256;
WndH=256;
WndX=GetSystemMetrics(SM_CXSCREEN)/2-WndW/2;
WndY=GetSystemMetrics(SM_CYSCREEN)/2-WndH/2;

VC6.0 + Debug + Watch(err,hr) == "0x00000008, Недостаточно памяти для обработки комманды"
Re[3]: Прошу прощения, за глупый вопрос. ErrCode 0x08
От: aik Австралия  
Дата: 14.06.05 12:12
Оценка:
Здравствуйте, anvaka, Вы писали:

aik>>Во1ых, что в wcl.lpszClassName и AppName? Класс зарегистрен?

A>Класс зарегестрирован, wcl.lpszClassName == "Class_NAME";
A>AppName == "My Application"

Точно зарегистрирован? Обработчик WM_CREATE что возвращает?

aik>>Во2ых, перед вызовом любой API функции вызывай SetLastError(0), чтобы гарантировать что код ошибки именно от CreateWindow.

A>Код именно от CreateWindow(); Проверял в отладке:
A>err, hr

Пока SetLastError не вызовешь, толку не будет.

А вообще, ни видя кода, больше сказать ничего не могу.
Re[2]: Прошу прощения, за глупый вопрос. ErrCode 0x08
От: MShura  
Дата: 14.06.05 13:29
Оценка: +2
aik>Во2ых, перед вызовом любой API функции вызывай SetLastError(0), чтобы гарантировать что код ошибки именно от CreateWindow.

У Вас неправильные представления о поведении last error.
Если функция API отработала правильно, то last error не имеет смысла.
Если API функция отработала с ошибкой, то только тогда имеет смысл last error.

Следствием этого является бесмысленность обнуления last error перед вызовом API функции.
Если вы знаете функцию, для которой это не так, то можете смело отсылать такой баг в MS.

Что касается сути вопроса, то неплохо бы узнать успевают ли прийти какие-нибудь сообщения в оконную процедуру.
Например WM_CREATE посылается окну до возврата из CreateWindow
Re[3]: Прошу прощения, за глупый вопрос. ErrCode 0x08
От: anvaka Украина Yasiv
Дата: 14.06.05 15:01
Оценка:
Здравствуйте, MShura, Вы писали:

MS>Что касается сути вопроса, то неплохо бы узнать успевают ли прийти какие-нибудь сообщения в оконную процедуру.

MS>Например WM_CREATE посылается окну до возврата из CreateWindow

Действительно, мне стоило заглянуть в обработчик событий, там происходило то, почему я получил восьмую ошибку .
WM_CREATE приходит.
Оказывается, после вызова CreateToolbarEx(), происходит эта самая ошибка.
Замечательно то, что в отладочной версии я вижу главное окно, а в релизе — нет .
Вот функция, созадющая мой тулбар:


// Define this enumaration for easier array indexing
enum
{
    LEFT_ARROW,
    RIGHT_ARROW,
    SPACE_1,
    REFRESH_BUTTON,
    RESOURCE_BUTTON,
    NUMBER_OF_TB_BUTTONS,
    NUMBER_OF_SEPARATORS = 1
};

BOOL CreateToolBar(HWND hWnd)
{ 
    if(!ViewToolbarFlag)
    {
        ghToolBar=NULL;
        return FALSE;// We don't wanna toolbar
    }
    // Initialize each of the buttons with the appropiate values
    TBBUTTON tbButton[NUMBER_OF_TB_BUTTONS] = { 0 };

    tbButton[SPACE_1].fsStyle   = TBSTYLE_SEP;

    tbButton[LEFT_ARROW].iBitmap   = 0;
    tbButton[LEFT_ARROW].idCommand = MI_COLLAPSE;
    tbButton[LEFT_ARROW].fsState   = TBSTATE_ENABLED;
    tbButton[LEFT_ARROW].fsStyle   = TBSTYLE_BUTTON;

    tbButton[RIGHT_ARROW].iBitmap    = 1;
    tbButton[RIGHT_ARROW].idCommand  = MI_EXPAND;
    tbButton[RIGHT_ARROW].fsState    = TBSTATE_ENABLED;
    tbButton[RIGHT_ARROW].fsStyle    = TBSTYLE_BUTTON;

    tbButton[REFRESH_BUTTON].iBitmap   = 2;
    tbButton[REFRESH_BUTTON].idCommand = MI_REFRESH;
    tbButton[REFRESH_BUTTON].fsState   = TBSTATE_ENABLED;
    tbButton[REFRESH_BUTTON].fsStyle   = TBSTYLE_BUTTON;

    tbButton[RESOURCE_BUTTON].iBitmap  = 3;
    tbButton[RESOURCE_BUTTON].idCommand= MI_RESOURCES;
    tbButton[RESOURCE_BUTTON].fsState  = TBSTATE_INDETERMINATE;
    tbButton[RESOURCE_BUTTON].fsStyle  = TBSTYLE_BUTTON;

    // Create the toolbar with the most commonly used functions
    ghToolBar = CreateToolbarEx (hWnd,
                                 WS_VISIBLE | WS_CHILD | WS_BORDER | TBSTYLE_TOOLTIPS,
                                 IDC_TOOLBAR,
                                 // The number of images is the number of
                                 // buttons minus the separators
                                 NUMBER_OF_TB_BUTTONS - NUMBER_OF_SEPARATORS,
                                 hInst,
                                 TOOLBAR_BMP,
                                 tbButton,
                                 NUMBER_OF_TB_BUTTONS,
                                 16, 16, 16, 32,
                                 sizeof(TBBUTTON));
    if (NULL == ghToolBar)
    {
        return FALSE;
    }

    SaveLoadTB(false);
    ShowWindow(ghToolBar,SW_SHOW);
    return TRUE;
}


TOOLBAR_BMP — идентификатор ресурса — битмап 32x32, глубины в 8 бит.
попытка изменить размеры кнопки, или рисунка к успеху не привели...
И еще, что-бы значила строка в output window об исключении?

Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\comctl32.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\wsock32.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\ws2_32.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\ws2help.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\winmm.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\mpr.dll', no matching symbolic information found.
Loaded symbols for 'D:\WINDOWS\system32\MSVCRTD.DLL'
Loaded 'D:\WINDOWS\system32\shell32.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\shlwapi.dll', no matching symbolic information found.
Loaded symbols for 'D:\WINDOWS\system32\MSVCP60D.DLL'
Loaded 'D:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\mswsock.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\dnsapi.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\winrnr.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\wldap32.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\rasadhlp.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\hnetcfg.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\wshtcpip.dll', no matching symbolic information found.
First-chance exception in WinShell.exe (KERNEL32.DLL): 0x000006D9: (no name).
Loaded 'D:\WINDOWS\system32\msctf.dll', no matching symbolic information found.
Loaded 'D:\Program Files\PRMT6\PRMTED\EDSel.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\mfc42.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\ole32.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\oleaut32.dll', no matching symbolic information found.
Loaded 'D:\WINDOWS\system32\mfc42loc.dll', no matching symbolic information found.
The program 'F:\TEMP\cpp\NetLook 1.4\Debug\WinShell.exe' has exited with code 0 (0x0).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.