CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何让自己的软件兼容不同的操作系统?

楼主batman4242()2002-09-15 11:18:13 在 VC/MFC / 基础类 提问

我发现自己在win2000下作的程序,在98下运行都不太正常,会出现资源耗尽的现象  
  这应该怎么解决?? 问题点数:100、回复次数:18Top

1 楼cwanter(亚玛逊河上的渔夫)回复于 2002-09-15 11:20:50 得分 0

2k与98的区别主要是unicode和安全性问题,还有就是有的函数2000下有,98下没有。Top

2 楼lanfengjiyue(歪脚鸭)回复于 2002-09-15 11:23:00 得分 0

不太好解决。这和操作系统底层有关。Top

3 楼stonespace(stonespace)回复于 2002-09-15 11:25:43 得分 40

资源耗尽不是兼容性问题,使程序本身的问题,检查一下是否有内存泄漏,是否有GDI资源文件句柄等泄漏,new/malloc等动态内存分配是否用得太多了导致内存碎片问题。  
   
  另外在DC上画图9x下更容易溢出,避免使用太大的坐标。如果使用多线程,9x的时间片也比2k长。  
  Top

4 楼batman4242()回复于 2002-09-15 11:30:30 得分 0

如果内存泄漏那么为什么2000会运行的好好的呢,是不是二者管理的方式不同Top

5 楼noproblem_jyb(ybjiang)回复于 2002-09-15 11:42:12 得分 0

的确有很大的不同。  
  比如,在Win2k下,scroll   bar的范围是32bit的值;   但在Win9x下虽说也使用32-bits,但实际只使用了低16-bits.  
  另外,在Win9x下有些函数名存实亡,只会return一个false,用GetLastError(),system   will   tell   you,   "NOT   IMPLEMENTED".   ooh...  
   
  Top

6 楼guzizhao()回复于 2002-09-15 11:54:06 得分 0

看看是不是api不一样。Top

7 楼stonespace(stonespace)回复于 2002-09-15 11:59:57 得分 40

象这种资源耗尽的问题,应该具体检查原因,很难说的,如果程序没有问题,再考虑使不是操作系统的问题。不过以前我还没见过因为操作系统bug,导致资源耗尽的例子。  
   
  检查内存泄漏,可以用vc运行debug版,退出的时候如果有内存泄漏vc会输出信息。其它系统资源可以看系统技术器,检查运行程序之前和之后各类句柄数目是否发生累积性变化。  
   
  有时候2k比较健壮一些,发生错误的时候比9x难表现出来,并不代表程序没有错误。Top

8 楼Jason_guo(梦想难成,努力能成!)回复于 2002-09-15 12:04:18 得分 0

看来移植的问题挺烦恼的。我是学JAVA的,还没有遇到这些问题。:)Top

9 楼tttc(Azure)回复于 2002-09-15 13:00:16 得分 0

2k与98在内存管理方面有些不同,2k较健壮,因此较严格。因此,你的关于内存存取的一些API可能有些问题,回去再仔细看看吧!  
  Top

10 楼sans(长风半日)回复于 2002-09-15 13:14:04 得分 0

多看看一些函数的说明。尽量使用win32的标准,而不是使用nt的标准。  
  可以在软件启动时取得操作系统的版本,并且在有影响的功能上采取不同的函数。Top

11 楼nevergrief(孤独骑士)回复于 2002-09-15 15:06:50 得分 20

简单呀,启动时,判断操作系统版本,如果是98,就不工作或者退出!!!  
   
  dwVersion   =   GetVersion();   //获得Windows   NT或Win32的版本号  
  if   (dwVersion   <   0x80000000)      
  {//   Windows   NT系列  
                  OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES   |   TOKEN_QUERY,   &hToken);  
                  LookupPrivilegeValue(NULL,   SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);  
   
  tkp.PrivilegeCount   =   1;     //   设置一个权限  
  tkp.Privileges[0].Attributes   =   SE_PRIVILEGE_ENABLED;  
   
                  AdjustTokenPrivileges(hToken,   FALSE,   &tkp,   0,(PTOKEN_PRIVILEGES)NULL,   0);  
   
                  ExitWindowsEx(EWX_REBOOT   |   EWX_FORCE,   0);  
  }  
  else  
  {//Windows   95系列  
                  ExitWindowsEx(EWX_REBOOT   |   EWX_FORCE,0);  
  }  
  用注册表也可以  
  Reg.Open(HKEY_LOCAL_MACHINE,   "SOFTWARE\\Microsoft\\Windows   NT\\CurrentVersion");  
  Reg.Read("ProductName",   m_strRenameWin);  
  Top

12 楼maoxianwang(傻蛋)回复于 2002-09-15 15:28:29 得分 0

最好写两个版本Top

13 楼batman4242()回复于 2002-09-18 11:59:54 得分 0

如果是时间片的原因那会有什么现象?Top

14 楼onestab()回复于 2002-09-18 12:11:01 得分 0

有时候2k比较健壮一些,发生错误的时候比9x难表现出来,并不代表程序没有错误。  
  很对!!Top

15 楼albert()回复于 2002-09-18 12:22:48 得分 0

不同的API函数在不同的系统里的支持程度不一样,建议仔细看看你所用到的函数在MSN中的Remarks说明。Top

16 楼qing_li73(Vincent Lee)回复于 2002-09-18 13:06:47 得分 0

写的时候就要注意测试,在不同平台下工作情况,牵扯到内存的部分尤其要小心。Top

17 楼rushing(勇敢的心)回复于 2002-09-18 13:20:32 得分 0

用C#或者Java可以适应不同的操作系统,Delphi也可以。  
  Top

18 楼dimcat(不管白猫还是黑猫,抓到老虎的就是好猫)回复于 2002-09-18 16:00:28 得分 0

就象许多软件有   for   win95   ;   foe   win98   ;   for   nt     .....  
  一样,应该有多个版本  
  特别是win9x   与   win2000,xp之间  
   
   
  Top

相关问题

  • 应用软件在不同操作系统下的使用问题
  • 请教:ATL操作系统兼容性
  • 我设计的软件在不同的操作系统中告警信息总是不一样?
  • JSP不同数据库 不同操作系统乱码问题
  • 软件适应多个操作系统应注意什么?
  • 不同操作系统出来到界面不一样??
  • 32位的操作系统与64位的有什么不同?
  • 不同的操作系统中的日期显示问题?
  • 关于在不同操作系统下的SQL查询语句
  • 关于不同操作系统下编程的问题

关键词

  • win32
  • 操作系统
  • 函数
  • 内存泄漏
  • 内存
  • 检查
  • 资源耗尽
  • 程序
  • 问题
  • 不同

得分解答快速导航

  • 帖主:batman4242
  • stonespace
  • stonespace
  • nevergrief

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo