道。道。道

安全特性不等于安全的特性

   :: 首页 :: 联系 :: 聚合  :: 管理

常用链接

搜索

  •  

最新评论

话就不多说了,你一定能看懂。这里运行时库一定要指定为"多线程/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 了。
posted on 2007-05-23 19:51 独孤九剑 阅读(2356) 评论(0)  编辑 收藏 引用 所属分类: Win32Visual C++ 8.0