写了一个程序:
#include <iostream.h>
int main()
{
  cout << "Please Enter Your First Name:\n";
  cout << "\n";
  return 0;
}这几行在VC++6.0下编译有错,如下:
  error lnk2001: unresolved external symbol_WinMain@16;
出现这个错误,在网上一查,有人提示vc里建工程的时候应该选: win32 console application。
我本来是选win32  application按大鸟们的提示,我改为win32 console application来建工程,果然错误没有了。
现在我想高手们告诉我,为什么会这样,win32 console application与win32 application他们之间有什么区别,在什么情况下应该用win32 console application而在什么情况下又得用win32 application呢?
希望高手们能给小弟上一课!

解决方案 »

  1.   

    入口函数的名字不一样,呵呵。main - WinMain
      

  2.   

    win32 console是控制台程序,
    win32 application是窗口程序,可视化的
    所以你在win32 application中cout是没用的还有你用win32 application的话向导会帮你生成框架的,入口函数你可以看一下是main还是_WinMain
      

  3.   

    Windows支持两种类型的应用程序。一种是基于图形用户界面(GUI)的应用程序,另一种是基于控制台用户界面(CUI)的应用程序。 基于G U I 的应用程序有一个图形前端程序。它能创建窗口,拥有菜单,可以通过对话框与用户打交道,并可使用所有的标准“Wi n d o w s ”组 件。Wi n d o w s 配备的所有应用程序附件(如Notepad 、Calculator 和WordPad ),几乎都是基于G U I 的应用程序。基 于控制台的应用程序属于文本操作的应用程序。它们通常不能用于创建窗口或处理消息,并且它们不需要图形用户界面。虽然基于C U I 的应用程序 包含在屏幕上的窗口中,但是窗口只包含文本。命令外壳程序CMD.EXE(用于Windows 2000 )和COMMAND.COM (用于Windows 98)都是典型的 基于CUI的应用程序。这两种类型的应用程序之间的界限是非常模糊的。可以创建用于显示对话框的C U I 应用程序。例如,命令外壳程序可能拥有一个特殊的命令,使它 能够显示一个图形对话框,在这个对话框中,可以选定你要执行的命令,而不必记住该外壳程序支持的各个不同的命令。也可以创建一个基于G U I 的应用程序,它能将文本字符串输出到一个控制台窗口。我常常创建用于建立控制台窗口的G U I 应用程序,在这个窗口中,我可以查看应用程序执 行时的调试信息。当然你也可以在应用程序中使用图形用户界面,而不是老式的字符界面,因为字符界面使用起来不太方便。当使用Microsoft Visual C++来创建应用程序时,这种集成式环境安装了许多不同的链接程序开关,这样,链接程序就可以将相应的子系统嵌入产生的可执行程序。用于C U I 应用程序的链接程序开关是/ S U B S Y S T E M : C O N D O L E ,而用于G U I 应用程序的链接程序开关是SUBSYSTEM : WINDOWS 。当用户运行一个应用程序时,操作系统的加载程序就会查看可执行图形程序的标题,并抓取该子系统的值。如果该值指明一个CUI应用程序,那么加载程序就会自动保证为该应用程序创建文本控制台窗口。如果该值指明这是个G U I 应用程序,那么加载程序不创建控制台窗口,而只是加载应用程序。一旦应用程序启动运行,操作系统就不再考虑应用程 序拥有什么类型的用户界面。Wi n d o w s 应用程序必须拥有一个在应用程序启动运行时调用的进入点函数。可以使用的进入点函数有4 个: int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE,
       PSTR pszCmdLine, int nCmdShow);int WINAPT wWinMain(HINSTANCE hinstExe,HINSTANCE,
       PWSTR pszCmdLine,int nCmdShow);int __cdecl main(int argc,char *argv[],char *envp[]);int _cdecl wmain(int argc, wchar_t *argv[],
       wchar_t *envp[]);
    操作系统实际上并不调用你编写的进入点函数。它调用的是C / C + +运行期启动函数。该函数负责对C / C + +运行期库进行初始化,这样,就可以 调用m a l l o c 和f r e e 之类的函数。它还能够确保已经声明的任何全局对象和静态C + +对象能够在代码执行以前正确地创建。
      

  4.   

    把主函数的入口改成main()可能也可以,没试过