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

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-06-23
MFC是有MAIN函数的,微软为了在使用时方便将该函数封装在了其框架内部,我们写程序的时候只需要关系窗口的实现就可以了。
第2个回答  2008-08-21
mfc程序编译的时候,会把main函数自动编译进来

当然,它使用了一个_tmain的宏来代替

如果6.0的话,可以看下孙鑫的视频教程,里面详细讲了,main函数在哪里了
第3个回答  2008-08-20
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
第三课本回答被提问者采纳
第4个回答  2008-08-20
mfc程序确实没有main的 只有winmain 这是window32程序的入口

但是在mfc里你是看不到winmain的,因为它被封装在一个类里面

MFC没有main函数也可以执行吗?急
关于MFC的main函数2008-01-21 11:23在DOS下,程序的执行是从main函数开始的。在Windows下,对应的函数是WinMain。但是,如果浏览Hello程序的所有的方法和全局函 数,是找不到WinMain函数的。MFC考虑到典型的Windows程序需要的大部分初始化工作都是标准化的,因此把WinMain函数隐藏在应用程序 的框架中,编...

c语言中程序的入口?
c++程序的入口函数是main()函数,一般vc里是有返回值的main()函数即intmain()函数。如果你是用MFC编程的话会发现没有main()函数,实际上是MFC的框架将其隐藏了,程序的入口依然是main()函数。虽然是这么说,但这些入口只是代码级的入口。真正编译后,编译器会加入Run-time库的Startup代码,它才是程...

MFC工程,编译时先调用了哪个函数?找不到main啊~
MFC中程序的入口是WinMain函数,这是一个WINAPI函数,是在APPMODUL.CPP中定义的,这个文件在VC6.0的安装目录下。你调试MFC程序时,点击Restart按钮(Ctrl+Shift+F5),就会进入该函数。\/\/\/ \/\/ export WinMain to force linkage to this module extern int AFXAPI AfxWinMain(HINSTANCE hInstance, HINST...

用VC++6.0新建了mfc的dll项目,但怎么跟c语言不一样,没有main...
在c中,如果你建一个工程在一个.cpp源文件中有main(),另一个中没有main().也是可以连接运行的,但肯定有一个.cpp中有main()函数

为什么c++中的cpp没有main函数
首先dos下是main入口,windows下是 WinMain 入口,MFC程序已经将winMain函数封装起来了,所以你找不到。你要了解这部分内容可以参考《深入浅出MFC》。直接写win32程序,就要用到winmain了。你可以尝试建一个空的win32程序。

每一个C++程序都有一个main函数吗?
一个C\/C++的程序并不一定都有main()函数,比如,你用VC++6.0创建一个MFC APPWizard 工程,你会发现其中并没有main()函数。一般的,我们编写一个DOS程序时,都是从main()函数开始,而Windows程序则不一定从main()函数开头。

请教一个工程只有一个MAIN()函数吗
——是的,所有的工程只有一个main()函数!!不只是这样,可以这么说,任何能运行的工程,不管它的代码有几十行、几百万行代码,全都是一个main()函数。所有的工程运行时,都是先找main()函数,它是一个入口函数,也就是只有找到这个函数了才从这个函数开始运行程序,要不程序是不会运行的。

C++的开始文件在哪?
你在哪个文件定义了main函数就从哪个文件开始执行,如果你用的是mfc的就不用找main函数了,因为基本不用你往里面些什么东西

为什么mfc的入口是InitInstance()而没有WinMain()
程序执行的时候,从PE文件头开始执行,在进入Winmain函数之前,进行一系列的必备的初始化。MFC对这一系列的过程进行了封装。提供给编程人员的第一个裸露程序入口就是CWinApp的InitInstance(),其实程序的入口依然是WinMain()函数。大家都知道,每个程序都有拥有一个进程,每个进程至少有一个线程就是主线程。...

MFC 声明问题 求大神!!!
而这里,你直接把代码写在全局,谁调用它们了?什么时候执行他们?main()函数或main()函数下的子函数不给他们机会,他们永远没机会被执行。正是这样一个情况,我们的代码写函数里面,(在C++里面的话,可以对应到响应事件,消息处理等)。编译器为了提醒我们,会直接报错,这是非法代码。以前我也琢磨过...

相似回答