标题: Dos如何能让程序使用到xms的内存
[打印本页]
作者: liyangwyh
时间: 2007-6-12 17:21
标题: Dos如何能让程序使用到xms的内存
请问各位,我一个程序有3百多K了,再调用别的程序就出现内存不足的问题,请Dos如何能让程序使用到xms的内存
作者: firstsail
时间: 2007-6-12 17:50
关于XMS内存,可以这样获得
(1)通过使用WinSail V2.0的XMS管理模块,类名为CXmsMemroy获得
(2)直接访问XMS,参照XMS扩展内存规范!
void far *pXmsVector = NULL; //XMS管理程序入口地址
//......
union REGS mRegs;
struct SREGS mRegSegs;
mRegs.x.ax = 0x4310;
int86x(0x2F, &mRegs, &mRegs, &mRegSegs);
//注意int 是16位整数
*(((unsigned int far *)&pXmsVector) + 0) = mRegs.x.bx;
*(((unsigned int far *)&pXmsVector) + 1) = mRegSegs.es;
if (pXmsVector == NULL)
{
//你没有安装Xms扩展内存管理程序,请加载Himem.Sys文件
}
Last edited by firstsail on 2007-6-12 at 06:41 PM ]
作者: firstsail
时间: 2007-6-12 21:44
我有一个工程,多个Exe文件加起来有8M字节多,整个工程14M多,如果编译成一个Exe文件是不实现的,我作了功能分解
“主程序 + 子程序1 + 子程序2 + 子程序3 + 子程序4 ... + 子程序N ”
为了运行“子程序”,将“子程序文件名 + 识别标志 + 回车换行”写入键盘缓冲区,并将“主程序”主动退出,这时会自动运行“子程序”。
子程序退出到DOS之前,将“主程序文件名 + 识别标志 + 回车换行”写入键盘缓冲区,“子程序”退出后,会自动运行“主程序”。
(1)子程序读到“识别标志”,表示是主程序调用,退出时必须实现调回主程序的代码。
(2)主程序读到“识别标志”,表示是子程序返回,必须实现子程序退出前的状态代码。
由于键盘缓冲区只有32字节,除去回车换行后,只剩下14个有效字符,所以不要写入程序名所在的目录,也不要写入文件后缀。
由于写入键盘缓冲区的每一个字符,必须写入“高字节扫描码 + 低字节ASCII码”,这样太繁,可以来一个偷梁换柱,写入的是“高字节永为0”,低字节ASCII码”。经测试,在“纯DOS”或Win9X下能正确运行。而在WinXP或Win2000下只需人工补一个回车换行即可。
Last edited by firstsail on 2007-6-12 at 10:11 PM ]