AfxGetMainWnd не работает в MS VS 7.1
От: PavelT100 Россия  
Дата: 24.12.03 13:03
Оценка:
Имел работающий проект на VS 6.0. Откомпилировал его на VS 7.1. Перестало работать.
Функция AfxGetMainWnd стала возвращать 0. Точнее ноль стала возвращать функция AfxGetThread.


_AFXWIN_INLINE CWnd* AFXAPI AfxGetMainWnd()
    { CWinThread* pThread = AfxGetThread();
        return pThread != NULL ? pThread->GetMainWnd() : NULL; }


Что бы это значило ? И как с этим бороться ?

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.


PT>
PT>_AFXWIN_INLINE CWnd* AFXAPI AfxGetMainWnd()
PT>    { CWinThread* pThread = AfxGetThread();
PT>        return pThread != NULL ? pThread->GetMainWnd() : NULL; }
PT>


PT>Что бы это значило ? И как с этим бороться ?



Таже проблема Под VS6 все запускалось, а на 2003 оказывается.
Чувствую, что решение где-то на поверхности, но не могу понять где
int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPTSTR lpCmdLine, int nCmdShow)
{
    ASSERT(hPrevInstance == NULL);

    int nReturnCode = -1;
    CWinThread* pThread = AfxGetThread();
//Тут pThread == NULL из-за чего потом и вылетает :(
Re[2]: AfxGetMainWnd не работает в MS VS 7.1
От: Plotter  
Дата: 11.07.05 06:57
Оценка:
Подозреваю, что у меня что-то не так прописано в настройкх компилятора, но в каком направлении копать я пока понять не могу.
Re[3]: AfxGetMainWnd не работает в MS VS 7.1
От: Denwer Россия  
Дата: 11.07.05 10:11
Оценка:
Здравствуйте, 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.

Re[4]: AfxGetMainWnd не работает в MS VS 7.1
От: Plotter  
Дата: 11.07.05 10:39
Оценка:
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.


MSDN было первое, куда я полез... и это я, конечно же, видел.
Но секундочку... может я туплю, но AfxWinMain — это не моя функция, а часть MFC. И AfxGetThread вызывается именно в ней. Т.е. неправильный указатель на процесс вылезет еще до начала _моей_ части кода, а в самих MFC.
Я, может, и рад там что-то подправить, но это будет неправильно.

Или я чего-то не понял?
Re[5]: AfxGetMainWnd не работает в MS VS 7.1
От: Denwer Россия  
Дата: 11.07.05 10:46
Оценка:
Здравствуйте, 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, теперь это не так.
Re[6]: AfxGetMainWnd не работает в MS VS 7.1
От: Plotter  
Дата: 11.07.05 11:26
Оценка:
D>Там написано что нужно сделать, что бы твоя прога работала и в 6 и в 7 студии , не больше не меньше, и незачем там подправлять ничего.
D>Вот примерный алгоритм, если тебе вернулась NULL из AfxWinMain, то вызови после этого AfxGetApp, просто раньше это делалось внутри функции AfxGetThread, теперь это не так.

Угу... уже лучше... это я уяснил.. но есть "маленькая" проблема.
Программа не доходит до выхода из AfxWinMain, а падает прямо таки внутри неё, т.к. после получения указателя на поток там идёт попытка вызова pThread->InitInstance() по несуществущему указателю pThread.

Где же мне тогда вызывать AfxGetApp ?
Re[7]: AfxGetMainWnd не работает в MS VS 7.1
От: Plotter  
Дата: 12.07.05 09:53
Оценка:
В общем, не в этом тут дело, как мне кажется, а, скорее, из-за того, что я как-то не правильно собираю ДЛЛ, которая потом используется в проекте.
Я уже перечитал все, что встретил про ДЛЛ и про потоки, пытаясь получить недостающие знания. Но, все равно, пока в этом вопросе я явно слабоват. А проект, как на зло, достаточно обширный по моим меркам и что-то мне ккажется, что самостоятельно я его побороть не смогу.

Может есть хоть какие-то соображения по поводу того, в каком направлении копать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.