是不是在编译时将两个程序(一个MS-DOS程序,一个Win32程序)进行组合?
如果是,具体怎么做到?(假设使用 Visual C++ 6.0 )
如果不是,请给出方法.

解决方案 »

  1.   

    在windows 9x、NT、2000下,所有的可执行文件都是基于Microsoft设计的一种新的文件格式Portable Executable File Format(可移植的执行体),即PE格式。有一些时候,我们需要对这些可执行文件进行修改,下面文字试图详细的描述PE文件的格式及对PE格式文件的修改。 
    1、PE文件框架构成 
    DOS MZ header 
    DOS stub 
    PE header 
    Section table 
    Section 1 
    Section 2 
    Section ... 
    Section n 
    上表是PE文件结构的总体层次分布。所有 PE文件(甚至32位的 DLLs) 必须以一个简单的 DOS MZ header 开始,在偏移0处有DOS下可执行文件的“MZ标志”,有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,然后运行紧随 MZ header 之后的 DOS stub。DOS stub实际上是个有效的EXE,在不支持 PE文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串 " This program cannot run in DOS mode " 或者程序员可根据自己的意图实现完整的 DOS代码。通常DOS stub由汇编器/编译器自动生成,对我们的用处不是很大,它简单调用中断21h服务9来显示字符串"This program cannot run in DOS mode"。 
      

  2.   

    在建立工程的時候,選擇Win32 Console Application, 這樣建立的程序就可以了。
      

  3.   

    STUB 内定是加入 WinStub.exe , 你可以找出来去执行看看, 那档只有一句;话, 所以你可以为你的 Windows 程序加入 DOS模式下的程序码, 至于要加什 ... 编译及连结: Win A:\WINDLL>fl /c /Aw /Gw test.for Microsoft (R
      

  4.   

    Linker Reference
    Home |  Overview |  How Do I |  FAQ |  DetailsLINK is a 32-bit tool that links Common Object File Format (COFF) object files and libraries to create a 32-bit executable (.EXE) file or dynamic-link library (DLL). Following is a comprehensive list of options for LINK.EXE. For information on how to specify an option, see Set Linker Options. This section also includes information on Compiler-Controlled LINK Options, LINK Input Files, and LINK Output./STUB:filename
    Attaches an MS-DOS stub program to a Win32 program
      

  5.   

    LINK.EXEMicrosoft (R) Incremental Linker Version 6.00.8447
    Copyright (C) Microsoft Corp 1992-1998. All rights reserved.usage: LINK [options] [files] [@commandfile]   options:      /ALIGN:#
          /BASE:{address|@filename,key}
          /COMMENT:comment
          /DEBUG
          /DEBUGTYPE:{CV|COFF}
          /DEF:filename
          /DEFAULTLIB:library
          /DELAY:{NOBIND|UNLOAD}
          /DELAYLOAD:dll
          /DLL
          /DRIVER[:{UPONLY|WDM}]
          /ENTRY:symbol
          /EXETYPE:DYNAMIC
          /EXPORT:symbol
          /FIXED[:NO]
          /FORCE[:{MULTIPLE|UNRESOLVED}]
          /GPSIZE:#
          /HEAP:reserve[,commit]
          /IMPLIB:filename
          /INCLUDE:symbol
          /INCREMENTAL:{YES|NO}
          /LARGEADDRESSAWARE[:NO]
          /LIBPATH:dir
          /LINK50COMPAT
          /MACHINE:{ALPHA|ARM|IX86|MIPS|MIPS16|MIPSR41XX|PPC|SH3|SH4}
          /MAP[:filename]
          /MAPINFO:{EXPORTS|FIXUPS|LINES}
          /MERGE:from=to
          /NODEFAULTLIB[:library]
          /NOENTRY
          /NOLOGO
          /OPT:{ICF[,iterations]|NOICF|NOREF|NOWIN98|REF|WIN98}
          /ORDER:@filename
          /OUT:filename
          /PDB:{filename|NONE}
          /PDBTYPE:{CON[SOLIDATE]|SEPT[YPES]}
          /PROFILE
          /RELEASE
          /SECTION:name,[E][R][W][S][D][K][L][P][X]
          /STACK:reserve[,commit]
          /STUB:filename
          /SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.##]]
          /SWAPRUN:{CD|NET}
          /TSAWARE[:NO]
          /VERBOSE[:LIB]
          /VERSION:#[.#]
          /VXD
          /WARN[:warninglevel]
          /WINDOWSCE:{CONVERT|EMULATION}
          /WS:AGGRESSIVE
      

  6.   

    刚才我本来还想说清楚的,但因为不能连续发帖3次,所以没有说完。首先写一个纯DOS程序,编译成 xxx.exe文件,然后写一个windows界面程序,这个程序在连接的时候 link.exe /STUB:xxx.exe就可以了。
      

  7.   

    在 VC集成开发环境下去执行link.exe可能不方便。应该可以在程序中用代码实现:#pragma comment(linker.exe,"/Stub:你的纯DOS程序.exe")