将多个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);
}