再次深入理解win32控制台

来源:互联网 发布:程序员的昵称 编辑:程序博客网 时间:2024/05/17 07:14

今天,从网上查看代码,测试功能实现,遇到了不解的问题,

最后经过摸索,

算是基本解决问题,但是是否是这样的真正原因还不确定,

自己理解:

win32项目,就是可以显示控制台和窗口两种显示,因此它版本的项目

里面是可以或者说包涵着windows的函数。

win32控制台,就是只是显示控制台界面,其他的窗口可以在这个基础之上出来。

但是他里面是不包涵部分的windows函数的,通常报错如下,

错误 1 error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用 D:\test\PushDllTest\PushDllTest\LIBCMT.lib(crt0.obj)
错误 2 error LNK1120: 1 个无法解析的外部命令 D:\test\PushDllTest\Debug\PushDllTest.exe 1

解决办法:

第一种,属性->连接器->系统->子系统,改为窗口

第二种,新建工程,选择win32项目

下面代码,仅用于测试,便于理解

//// PushDllTest.cpp : 定义控制台应用程序的入口点。////////#include "stdafx.h"//////int _tmain(int argc, _TCHAR* argv[])//{//////return 0;//}//#include<Windows.h>HINSTANCE ghInst = NULL;char *szAppName = "SimpleAPI";char *szAppTitle = "用API编制的一个简单的窗口";LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE, HINSTANCE,LPSTR,int);LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM IParam){ char * msgCreate = "收到WM_CREATE消息!"; char *msgCaption = "提示消息"; char *msgDestroy = "收到WM_DESTROY消息"; char *msgLBTN = "鼠标左键被按下"; switch(message) { case WM_CREATE:  MessageBox(GetFocus(),msgCreate,msgCaption,MB_OK|MB_ICONINFORMATION);  break; case WM_LBUTTONDOWN:  MessageBeep(MB_ICONINFORMATION);  MessageBox(GetFocus(),msgDestroy,msgCaption,MB_OK|MB_ICONINFORMATION);  break; case WM_DESTROY:  MessageBox(GetFocus(),msgDestroy,msgCaption,MB_OK|MB_ICONINFORMATION);  PostQuitMessage(0);  break; default:return DefWindowProc(hwnd,message,wParam,IParam); } return FALSE;}int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR IpCmdLine,int nCmdShow){ WNDCLASS wc; MSG msg; HWND ghWnd = NULL; ghInst = hInstance; wc.style = CS_HREDRAW|CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName = szAppName; wc.lpszMenuName  = NULL ; RegisterClass(&wc); ghWnd = CreateWindow(szAppName,szAppTitle,WS_OVERLAPPEDWINDOW,0,0,400,350,NULL,NULL,hInstance,NULL); if(NULL == ghWnd)  return 0; ShowWindow(ghWnd,nCmdShow); UpdateWindow(ghWnd); while(GetMessage(&msg,NULL,0,0)) {  TranslateMessage(&msg);  DispatchMessage(&msg); } return msg.wParam;} 
原创粉丝点击