再次深入理解win32控制台

來源:互聯網
上載者:User

今天,從網上查看代碼,測試功能實現,遇到了不解的問題,

最後經過摸索,

算是基本解決問題,但是是否是這樣的真正原因還不確定,

自己理解:

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;} 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.