今天,從網上查看代碼,測試功能實現,遇到了不解的問題,
最後經過摸索,
算是基本解決問題,但是是否是這樣的真正原因還不確定,
自己理解:
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;}