Проблема с вызовом диалогового окна
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 01.02.17 07:13
Оценка:
В моей программе в файле MyDialog1.cpp я написал:

CSolutionDialog  solutionDialog(this);
solutionDialog(iterations,sigma0,calcedx,calcedy,calcedz,calcedVx,calcedVy,calcedVz,calceddeltax,calceddeltay,calceddeltaz,calceddeltaVx,calceddeltaVy,calceddeltaVz);
solutionDialog.DoModal();


В отладчике у меня выскакивает файл wincore.cpp и в нём функция DefWindowProc :

LRESULT CWnd::DefWindowProc(UINT nMsg, WPARAm wParam, LPARAM lParam)
{
    if (m_pfnSuper!=NULL)
        return ::CallWindowProc(m_pfnSuper,m_hWnd,wParam,lParam);
    WNDPROC  pfnWndProc;
    if ((pfnWndProc=*GetSuperWndProcAddr())==NULL)
        return ::DefWindowProc(m_hWnd,nMsg,wParam,lParam);
    else
        return ::CallWindowProc(pfnWndProc,m_hWnd,nMsg,wParam,lParam);
}


Остановка в файле wincore.cpp в функции DefWindowProc происходит на строке

return ::CallWindowProc(m_pfnSuper,m_hWnd,wParam,lParam);


При этом выскакивает окно с сообщением:

Необработанное исключение по адресу 0x3030302E в myprogram.exe: 0xC0000005:
Access violation (параметры: 0x00000008)


При попытке нажать на кнопку "Продолжить" в этом окне ничего не происходит (что один раз, что несколько раз)--приходится нажимать на кнопку "Прервать".

Но самое интересное--когда я в отладчике делаю точки останова внутри функций, у меня всё нормально работает. Также у меня всё нормально работает, если я удаляю строку

solutionDialog(iterations,sigma0,calcedx,calcedy,calcedz,calcedVx,calcedVy,calcedVz,calceddeltax,calceddeltay,calceddeltaz,calceddeltaVx,calceddeltaVy,calceddeltaVz);


то есть если остаются две строки:

CSolutionDialog  solutionDialog(this);
solutionDialog.DoModal();


В чём причина этого? Как мне исправить эту ошибку--чтобы у меня всегда появлялся диалог solutionDialog ?
1613 г. = 2024 г.
Re: Проблема с вызовом диалогового окна
От: VladFein США  
Дата: 01.02.17 18:00
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>...всё нормально работает, если я удаляю строку


RF>
RF>solutionDialog(iterations,sigma0,calcedx,calcedy,calcedz,calcedVx,calcedVy,calcedVz,calceddeltax,calceddeltay,calceddeltaz,calceddeltaVx,calceddeltaVy,calceddeltaVz);
RF>


RF>В чём причина этого?


Параметров маловато?
Re: Проблема с вызовом диалогового окна
От: anatolym  
Дата: 02.02.17 08:55
Оценка: +1
Здравствуйте, RussianFellow, Вы писали:

Есть небольшой шанс, что стек вызовов поможет понять проблему.
А так, что-то ты там в своем перегруженном операторе () напортачил, а что именно никто кроме тебя знать не может
Re: Проблема с вызовом диалогового окна
От: Evgeniy Skvortsov Россия  
Дата: 02.02.17 12:14
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Но самое интересное--когда я в отладчике делаю точки останова внутри функций, у меня всё нормально работает. Также у меня всё нормально работает, если я удаляю строку

RF>В чём причина этого? Как мне исправить эту ошибку--чтобы у меня всегда появлялся диалог solutionDialog ?

Ну ты же выяснил причину, проблема в вызове оператора () с миллионом параметров
Смотри где накосячил внутри, или код сюда выкладывай.
Re: Проблема с вызовом диалогового окна
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 02.02.17 14:24
Оценка:
Всем спасибо, но проблему решил я сам--в списке параметров я передавал неправильные значения (что-то типа +61 -ого порядка). Когда с этими значениями я разобрался, то диалог стал нормально вызываться.
1613 г. = 2024 г.
Re[2]: Проблема с вызовом диалогового окна
От: VladFein США  
Дата: 02.02.17 18:53
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Всем спасибо, но проблему решил я сам--в списке параметров я передавал неправильные значения (что-то типа +61 -ого порядка). Когда с этими значениями я разобрался, то диалог стал нормально вызываться.


Какую роль может играть значение какого-то параметра в возможности "вызывать" диалог???
Re[3]: Проблема с вызовом диалогового окна
От: anatolym  
Дата: 02.02.17 21:31
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Здравствуйте, RussianFellow, Вы писали:


RF>>Всем спасибо, но проблему решил я сам--в списке параметров я передавал неправильные значения (что-то типа +61 -ого порядка). Когда с этими значениями я разобрался, то диалог стал нормально вызываться.


VF>Какую роль может играть значение какого-то параметра в возможности "вызывать" диалог???


Да у него там какой-нибудь указатель на массив координат. С кривыми входными значениями произошел выход за пределы выделенной памяти с порчей чужих данных.
Re[3]: Проблема с вызовом диалогового окна
От: MasterZiv СССР  
Дата: 15.02.17 10:27
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Какую роль может играть значение какого-то параметра в возможности "вызывать" диалог???


Это не возможность вызвать диалог, это просто тупо защита памяти или другая программная ошибка,
никак не связанная с диалогом, кроме того факта, что код диалогового окна находится
при этом в стеке.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.