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

本文介绍如何通过指定运行时库和自定义入口函数来创建仅有3KB大小的Win32程序,并进一步减小至2KB的方法。文章还提供了具体的代码实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

话就不多说了,你一定能看懂。这里运行时库一定要指定为"多线程/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、付费专栏及课程。

余额充值