Имел работающий проект на VS 6.0. Откомпилировал его на VS 7.1. Перестало работать.
Функция AfxGetMainWnd стала возвращать 0. Точнее ноль стала возвращать функция AfxGetThread.
24.12.03 16:10: Перенесено модератором из 'C/C++' — ПК
Re: AfxGetMainWnd не работает в MS VS 7.1
От:
Аноним
Дата:
11.07.05 06:39
Оценка:
Здравствуйте, PavelT100, Вы писали:
PT>Имел работающий проект на VS 6.0. Откомпилировал его на VS 7.1. Перестало работать. PT>Функция AfxGetMainWnd стала возвращать 0. Точнее ноль стала возвращать функция AfxGetThread.
Таже проблема Под VS6 все запускалось, а на 2003 оказывается.
Чувствую, что решение где-то на поверхности, но не могу понять где
int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
ASSERT(hPrevInstance == NULL);
int nReturnCode = -1;
CWinThread* pThread = AfxGetThread();
//Тут pThread == NULL из-за чего потом и вылетает :(
Здравствуйте, Plotter, Вы писали:
P>Подозреваю, что у меня что-то не так прописано в настройкх компилятора, но в каком направлении копать я пока понять не могу.
А MSDN почитать трудно?
Note If you are porting an MFC project calling AfxGetThread from Visual C++ versions 4.2, 5.0, or 6.0, AfxGetThread calls AfxGetApp if no thread is found. In Visual C+ .NET and later, AfxGetThread returns NULL if no thread was found. If you want the application thread, you must call AfxGetApp.
D>Note If you are porting an MFC project calling AfxGetThread from Visual C++ versions 4.2, 5.0, or 6.0, AfxGetThread calls AfxGetApp if no thread is found. In Visual C+ .NET and later, AfxGetThread returns NULL if no thread was found. If you want the application thread, you must call AfxGetApp.
MSDN было первое, куда я полез... и это я, конечно же, видел.
Но секундочку... может я туплю, но AfxWinMain — это не моя функция, а часть MFC. И AfxGetThread вызывается именно в ней. Т.е. неправильный указатель на процесс вылезет еще до начала _моей_ части кода, а в самих MFC.
Я, может, и рад там что-то подправить, но это будет неправильно.
Здравствуйте, Plotter, Вы писали:
D>>А MSDN почитать трудно?
D>>
D>>Note If you are porting an MFC project calling AfxGetThread from Visual C++ versions 4.2, 5.0, or 6.0, AfxGetThread calls AfxGetApp if no thread is found. In Visual C+ .NET and later, AfxGetThread returns NULL if no thread was found. If you want the application thread, you must call AfxGetApp.
P>MSDN было первое, куда я полез... и это я, конечно же, видел. P>Но секундочку... может я туплю, но AfxWinMain — это не моя функция, а часть MFC. И AfxGetThread вызывается именно в ней. Т.е. неправильный указатель на процесс вылезет еще до начала _моей_ части кода, а в самих MFC. P>Я, может, и рад там что-то подправить, но это будет неправильно.
P>Или я чего-то не понял?
Там написано что нужно сделать, что бы твоя прога работала и в 6 и в 7 студии , не больше не меньше, и незачем там подправлять ничего.
Вот примерный алгоритм, если тебе вернулась NULL из AfxWinMain, то вызови после этого AfxGetApp, просто раньше это делалось внутри функции AfxGetThread, теперь это не так.
D>Там написано что нужно сделать, что бы твоя прога работала и в 6 и в 7 студии , не больше не меньше, и незачем там подправлять ничего. D>Вот примерный алгоритм, если тебе вернулась NULL из AfxWinMain, то вызови после этого AfxGetApp, просто раньше это делалось внутри функции AfxGetThread, теперь это не так.
Угу... уже лучше... это я уяснил.. но есть "маленькая" проблема.
Программа не доходит до выхода из AfxWinMain, а падает прямо таки внутри неё, т.к. после получения указателя на поток там идёт попытка вызова pThread->InitInstance() по несуществущему указателю pThread.
В общем, не в этом тут дело, как мне кажется, а, скорее, из-за того, что я как-то не правильно собираю ДЛЛ, которая потом используется в проекте.
Я уже перечитал все, что встретил про ДЛЛ и про потоки, пытаясь получить недостающие знания. Но, все равно, пока в этом вопросе я явно слабоват. А проект, как на зло, достаточно обширный по моим меркам и что-то мне ккажется, что самостоятельно я его побороть не смогу.
Может есть хоть какие-то соображения по поводу того, в каком направлении копать?