用VS2005也能制作体积很小的Win32程序(2KB - 3KB)

话就不多说了,你一定能看懂。这里运行时库一定要指定为"多线程/MT",否则最后Release版本的程序在其他机器上无法运行. 命令行 /MT  或 这里指定自定义入口函数名 命令行 /entry:Start  或 //Win32控制台程序 //---------------------------------------------- //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标准库,最后生成的程序只有 3KB大小,基本上和汇编写的程序大小差不多了.    如果要再小点,我们可以把 只读数据、导入表以及导出表节.rdata与代码节.text合并。(这里提到的节区是以VC编译器为准,不同的编译器对节的命名也许会有些不同) 连接器命令行添加 /merge:.rdata=.text 或 现在再看看大小 :(  2KB 了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值