話就不多說了,你一定能看懂。這里運(yùn)行時(shí)庫一定要指定為"多線程/MT",否則最后Release版本的程序在其他機(jī)器上無法運(yùn)行.
命令行 /MT 或

這里指定自定義入口函數(shù)名 命令行 /entry:Start 或
//Win32控制臺(tái)程序
//----------------------------------------------
//stdafx.h file
//----------------------------------------------
#pragma once
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#include <Windows.h>
//----------------------------------------------
//console.cpp
//----------------------------------------------
#include "stdafx.h"
HANDLE hStdIn;
HANDLE hStdOut;
BOOL __stdcall CtrlHandler(DWORD CtrlType)
{
if(CtrlType==CTRL_C_EVENT || CtrlType==CTRL_BREAK_EVENT)
CloseHandle(hStdIn);
return TRUE;
}
void Start()
{
hStdIn = GetStdHandle(STD_INPUT_HANDLE);
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleMode(hStdIn,ENABLE_LINE_INPUT|ENABLE_ECHO_INPUT|ENABLE_PROCESSED_INPUT);
SetConsoleCtrlHandler(CtrlHandler,TRUE);
HANDLE hHeap = GetProcessHeap();
PVOID szBuffer = HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1024);
DWORD dwBytesRead,dwBytesWrite;
while(TRUE){
if(!ReadConsole(hStdIn,szBuffer,1024,&dwBytesRead,NULL) || ((char*)szBuffer)[0] == 'q' )
break;
WriteConsole(hStdOut,szBuffer,dwBytesRead,&dwBytesWrite,NULL);
}
HeapFree(hHeap,HEAP_NO_SERIALIZE,szBuffer);
ExitProcess(0);
}
//Windows程序
//----------------------------------------------------
//stdafx.h
//----------------------------------------------------
#ifndef WINVER
#define WINVER 0x0501
#endif
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#ifndef _WIN32_WINDOWS
#define _WIN32_WINDOWS 0x0410
#endif
#ifndef _WIN32_IE
#define _WIN32_IE 0x0600
#endif
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
//----------------------------------------------------
// winapp.cpp
//----------------------------------------------------
#include "stdafx.h"
void __stdcall Start()
{
MessageBoxA(NULL,"Hello World!","?",MB_OK);
ExitProcess(0);
}
// Release版本
//制作Win32 - DLL文件的方法與前面相同以上僅使用
Windows標(biāo)準(zhǔn)庫,最后生成的程序只有 3KB大小,基本上和匯編寫的程序大小差不多了.
如果要再小點(diǎn),我們可以把 只讀數(shù)據(jù)、導(dǎo)入表以及導(dǎo)出表節(jié).rdata與代碼節(jié).text合并。(這里提到的節(jié)區(qū)是以VC編譯器為準(zhǔn),不同的編譯器對(duì)節(jié)的命名也許會(huì)有些不同)
連接器命令行添加
/merge:.rdata=.text 或 
現(xiàn)在再看看大小 :( 2KB 了。