将多个EXE文件合并成一个工程项目

1:由于DOS程序受640K内存限制,对于一个较大的项目,只有一个EXE文件是不现实的。一般来说,可以可以利用“往键盘缓冲区写入命令行”的形式,进行Exe文件切换,即往键盘缓冲区写入“不带后缀的程序名 + 重入标志 + 回车换行”

 

2:WinSail 推荐一种常用方式。

<1>在命令行加入一个“重入标志”参数,该参数一般不会出现用手工无意中输入的情况,所以最好用中文。由于键盘缓冲区只有16个字母,所以程序名称不要带后缀。在WinSail中,主程序名一般为Sail2000.Exe,“重入标志”为中文字母“觞”,可以调用

WORD far GetEntryAgainFormat()”函数获得。

 

<2>如果是子程序,读到这个“重入标志”参数,则子程序退出时须用<1>方式在命令行恢复主程序。

     int main(int argc, char** argv)

{

BOOL bEntryAgain = FALSE; //重入标志

if (argc == 2) //判断是否是主程序调用.

             {

                 WORD wFormat = *((WORD *)(argv[1]));

                 if (wFormat == ::GetEntryAgainFormat()) //或者if (wFormat == *((WORD *) (“”))

                 {

                      bEntryAgain = TRUE;

                 }

             }

 

        //这里增加您的代码

        //…….

 

        if (bEntryAgain)

        {

                ::ClearKeyboard(); //清除键盘缓冲区

                    ::AddKeyboardString("Sail2000 觞\xd"); //往键盘缓冲区写入“主程序 + 重入标志 + 回车”

        }

        return (0);

}

<3>如果是主程序读到这个“重入标志”,则主程序认为是“子程序”返回,主程序须作相应的处理。

int main(int argc, char** argv)

{

BOOL bEntryAgain = FALSE; //重入标志

if (argc == 2) //判断是否是子程序返回.

             {

                 WORD wFormat = *((WORD *)(argv[1]));

                 if (wFormat == ::GetEntryAgainFormat()) //或者if (wFormat == *((WORD *) (“”))

                 {

                      bEntryAgain = TRUE;

                 }

             }

 

        //这里增加您的代码

        //…….

 

         return (0);

}

 

<3>调用子程序(假设程序名为Sail1674.exe文件)时,主程序可以这样来处理。

int main(int argc, char** argv)

{

BOOL bEntryAgain = FALSE; //重入标志

if (argc == 2) //判断是否是子程序调返回

             {

                 WORD wFormat = *((WORD *)(argv[1]));

                 if (wFormat == ::GetEntryAgainFormat()) //或者if (wFormat == *((WORD *) (“”))

                 {

                      bEntryAgain = TRUE;

                 }

             }

 

if (bEntryAgain) //是子程序返回作出相应的代码处理

{

        //这里增加您的代码

//……

}

 

        //这里增加您的代码

        //…….

 

        if (需要调用子程序,且子程序名为Sail1674.Exe)

        {

                ::ClearKeyboard(); //清除键盘缓冲区

                    ::AddKeyboardString("Sail1674 觞\xd"); //往键盘缓冲区写入“子程序 + 重入标志 + 回车”

        }

        return (0);

}