MFC没有main函数也可以执行吗?急
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC没有main函数也可以执行吗?急相关的知识,希望对你有一定的参考价值。
我最近下了一个代码,可以执行,于是我想看懂它,但是找不到main函数啊,我在文件夹目录里找到了MAIN.CPP但是当我把它加到工程的时候却出现了编译错误,我用的是VC++6.0中文版,是一个MFC,请问没有main函数那么程序从哪儿开始编译呢?不是所有的函数都是从main函数开始执行的吗?
关于MFC的main函数2008-01-21 11:23在DOS下,程序的执行是从main函数开始的。在Windows下,对应的函数是WinMain。但是,如果浏览Hello程序的所有的方法和全局函 数,是找不到WinMain函数的。MFC考虑到典型的Windows程序需要的大部分初始化工作都是标准化的,因此把WinMain函数隐藏在应用程序 的框架中,编译时会自动将该函数链接到可执行文件中。程序员可以重写WinMain函数,但一般不需要这么做。下面的程序清单3-1给出了WinMain函数的代码。其中,_tWinMain函数在\DevStudio\Vc\Mfc\src\ AppModul.cpp中定义,它所调用的AfxWinMain函数在同一目录下的WinMain.cpp中定义。名字是_tWinMain函数而不是 WinMain,是考虑到对不同字符集的支持,在tchar.h中有_tWinMain的宏定义。在ANSI字符集下编译时,_tWinMain就变成 WinMain,在Unicode下编译时,_tWinMain就变成wWinMain。
提示:Unicode是具有固定宽度、统一的文本和字符的编码标准。由于Unicode采用的是16位编码,因此可以包含世界各地的书写系统的字 符和技术符号(如中文也在Unicode之中),从而克服了ASCII码在表示多语言文本上的不足之处,扩大了ASCII码7位编码方案的好处。 Unicode同等地对待所有的字符,并且在表示各种语言的任何字符时既不需要换码序列(escape)也不需要控制代码。Win32和Visual C++很好的支持Unicode字符集。
清单3-1 _tWinMain函数定义
// export WinMain to force linkage to this module
extern int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow);
#ifdef _MAC
extern "C" int PASCAL
#else
extern "C" int WINAPI
#endif
_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
// call shared/exported WinMain
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
AfxWinMain函数定义:
/////////////////////////////////////////////////////////////////////////////
// Standard WinMain implementation
// Can be replaced as long as 'AfxWinInit' is called first
int AFXAPI AfxWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
ASSERT(hPrevInstance == NULL);
int nReturnCode = -1;
CWinApp* pApp = AfxGetApp();
// AFX internal initialization
if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow))
goto InitFailure;
// App global initializations (rare)
ASSERT_VALID(pApp);
if (!pApp->InitApplication())
goto InitFailure;
ASSERT_VALID(pApp);
// Perform specific initializations
if (!pApp->InitInstance())
if (pApp->m_pMainWnd != NULL)
TRACE0("Warning: Destroying non-NULL m_pMainWnd\n");
pApp->m_pMainWnd->DestroyWindow();
nReturnCode = pApp->ExitInstance();
goto InitFailure;
ASSERT_VALID(pApp);
nReturnCode = pApp->Run();
ASSERT_VALID(pApp);
InitFailure:
#ifdef _DEBUG
// Check for missing AfxLockTempMap calls
if (AfxGetModuleThreadState()->m_nTempMapLock != 0)
TRACE1("Warning: Temp map lock count non-zero (%ld).\n",
AfxGetModuleThreadState()->m_nTempMapLock);
AfxLockTempMaps();
AfxUnlockTempMaps(-1);
#endif
AfxWinTerm();
return nReturnCode;
应用程序执行时,Windows自动调用应用程序框架内部的WinMain函数。如清单3-1所示,WinMain函数会查找该应用程序的一个全 局构造对象,这个对象是由CWinApp派生类构造的,有且只有一个。它是一个全局对象,因此在程序启动时,它就已经被构造好了。
随后,WinMain将调用这个对象的InitApplication和InitInstance成员函数,完成应用程序实例的初始化工作。随 后,WinMain调用Run成员函数,运行应用程序的消息循环。在程序结束时,WinMain调用AfxWinTerm函数,做一些清理工作。
参考资料:http://hi.baidu.com/johnstart/blog/item/507af92c84abe4e88b139947.html
参考技术A MFC是有MAIN函数的,微软为了在使用时方便将该函数封装在了其框架内部,我们写程序的时候只需要关系窗口的实现就可以了。 参考技术B mfc程序编译的时候,会把main函数自动编译进来当然,它使用了一个_tmain的宏来代替
如果6.0的话,可以看下孙鑫的视频教程,里面详细讲了,main函数在哪里了 参考技术C win32程序入口是 WinMain,MFC中,WinMain函数在 APPMODUL.CPP 中是这样定义的
extern "C" int WINAPI
_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
// call shared/exported WinMain
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
其中 _tWinMain 是一个宏,在TCHAR.h中定义的,定义如下
ANSI字符
#define _tWinMain WinMain
UNICODE字符
#define _tWinMain wWinMain
详情见这个视频
http://www.pconline.com.cn/pcedu/specialtopic/vcpp/32.html
更多关于MFC原理的的东西
http://www.pconline.com.cn/pcedu/empolder/gj/vc/0607/820674.html
第三课本回答被提问者采纳 参考技术D mfc程序确实没有main的 只有winmain 这是window32程序的入口
但是在mfc里你是看不到winmain的,因为它被封装在一个类里面
java中ExecutorService的线程池如何暂停所有的任务和继续所有的任务? 有这样的函数吗?
在线等!!!! 急。。。急。。。急。。。
Executor 提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。可以关闭 ExecutorService,这将导致其拒绝新任务。提供两个方法来关闭 ExecutorService。shutdown() 方法在终止前允许执行以前提交的任务,而 shutdownNow() 方法阻止等待任务启动并试图停止当前正在执行的任务。在终止时,执行程序没有任务在执行,也没有任务在等待执行,并且无法提交新任务。应该关闭未使用的 ExecutorService 以允许回收其资源。
通过创建并返回一个可用于取消执行和/或等待完成的 Future,方法 submit 扩展了基本方法 Executor.execute(java.lang.Runnable)。方法 invokeAny 和 invokeAll 是批量执行的最常用形式,它们执行任务 collection,然后等待至少一个,或全部任务完成(可使用 ExecutorCompletionService 类来编写这些方法的自定义变体)。
Executors 类提供了用于此包中所提供的执行程序服务的工厂方法。
参考资料:http://blog.sina.com.cn/s/blog_6151984a0100krj8.html
参考技术A 楼上说的挺全面的啊以上是关于MFC没有main函数也可以执行吗?急的主要内容,如果未能解决你的问题,请参考以下文章