![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-01 21:01 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,249 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » ems存存储一个600*400的二维数组 |
| 可打印版本 1,368 / 1 |
| 第1楼 jiaxu520 | 发表于 2006-07-11 12:07 |
| 新手上路 发帖 2 积分 12 | |
|
ems存存储一个600*400的二维数组 因为我需要一个600*400的二维数组存放浮点型数据,所以在一般DOS下不能申请这么大的二维数组,便想到用EMS申请的内存页面作为二维数组的行,一行中的数据都放在一页中,那么申请的总页数就是400页. 不知哪位高手指点,该如何做?
给出我的程序 unsigned hzhandle;//main函数中要用到释放内存页面时用到全局变量ZHANDLE double far *fardouble; double far *tmp,buffer[600];//4k==512*8 unsigned nowpagenum,pageaddr;//当前EMS页面数和得到的页地址 char Load_EMS(void) { int e,hzk,page,i,j; double flag; unsigned max_block,total; unsigned totalpage; // hzk=open(....);/////////// if(test_ems()){ if(!get_EMS_status()){ flag=get_number_of_pages(&nowpagenum,&totalpage); page=500; if(nowpagenum>page){ flag=get_page_frame_segment(&pageaddr); } if((!flag)&&(!allocate_memory(&hzhandle,page))){ fardouble=(double far *)MK_FP(pageaddr,0); tmp=fardouble;nowpagenum=0; /* for(e=400;e!=0;e--){ if(tmp==fardouble+16384){ map_memory(0,nowpagenum,hzhandle); nowpagenum++;tmp=fardouble; } } */ return 0; }} } return 1; } 我在具体存储数据时发现总是存不进去 |
|
| 第2楼 firstsail | 发表于 2006-07-11 18:59 |
| 高级用户 发帖 295 积分 668 来自 广东深圳 | |
|
可以使用WinSail V2.0的CXmsMemory扩展内存类,
其中可以用到: BOOL CXmsMemory:MallocXms(DWORD dwSize);//分配内存(以字节为单位) BOOL CXmsMemory::FreeXms(DWORD dwSize);//释放内存 BOOL CXmsMemory::SetFloatData(DWORD dwIndex, float fData);//将浮点数写入以字节为单位的索引地址中。 float CXmsMemory::GetFloatData(DWORD dwIndex););//从以字节为单位的索引地址中读出浮点数。 在http://www.firstsail.com.cn中可以下载Winsail V2.0编程库,从Sail.lib中可以析出Xms.Obj模块,共14K。 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |