请大家讨论一下。    老师给我几个可执行文件,是在98下运行的,移植到NT下出现了一些错误,如文件无法打开一类的。    由于一些源代码已经丢失,所以老师的意思是修改一些环境的dll,来使得该软件可以在NT下正常运行。开发环境也有问题,原先是在vc5环境下开发的。

解决方案 »

  1.   

    修改环境dll?你们老师不怕系统出问题吗?NT和9X从内核到上层结构都有很大差异,不是说替换就能替换的,你最好仔细一点。
      

  2.   

    可以在软件安装目录下替换dll,这样软件会先搜索当前目录下的dll,不会影响系统system32中的
      

  3.   

    老师的意思是修改一些环境的dll?
    你老师是异想天开!
    怎么能让windows来适应你的程序呢?
      

  4.   

    NT下的一些GDI API函数的支持要比98好一些,最简单的例子,98不支持自定义线形。还有一些其它的小问题,在API的说明中都会阐述你试着在98下用Depends看一下你的文件需要什么lib,copy过来试试吧。
      

  5.   

    真不知道是人老师说错了还是你听错了。???
    如果说可以替代DLL,还又不是变成了98!
      

  6.   

    如果你们老师的意思是修改NT的系统API来适应98的程序, 厉害
      

  7.   

    修改DLL应该是不可能的,将98的DLL复制到当前目录的方法应该也不行,因为一些DLL NT已经装入了内存,程序运行时根本就不会从你的目录中再去装一次,如果真能装,岂不内存中存在这两个系统了?
    所以,如果出现问题的地方不是很多的话可以采用一些HOOK的方法,像某些外挂程序那样动态改改程序中的调用。
    这个问题有创意哦,忍不住回答一下。
      

  8.   

    各位对不起,我表达有问题,是替换啊!系统dll能够修改吗?又没有源代码!!
      

  9.   

    替换应该也不行,两个系统间代码差别比较大,并且还涉及API调用到内核时的安全检测问题,几乎是不可能的。
    如果出错的地方比较多,建议您重写软件。
    如果比较少的话,可以采用修改程序IAT或者修改系统DLL在内存中的实现代码,就是简单的API HOOK,可以参考变速齿轮的实现方式。
    这是现在能想到的方法,大家来讨论讨论,还有没有其他的什么方法
    那位高手来点一下,说不定能产生像齿轮那样精彩的技巧。
      

  10.   

    98和NT的系统dll替换?应该也是不可能实现的!
      

  11.   

    你连问题的原因都没找到,还谈什么替换DLL这不是系统DLL的问题,这是native api的问题
    NT下系统API最终还是调用Native API,Native API通过int2e中断调用驱动的功能除非你能替换系统驱动……
      

  12.   

    我的意见,98下的程序在2000下一般是没有什么问题的(不然M$的OS还怎么卖?都不兼容!)。你应该先说说你的程序的主要功能,以及,在什么情况下出现错误,出现了什么样的错误,不然只能瞎忙。
      

  13.   

    在NT下模拟一个16位的环境,好像XP有这个功能。你先到XP下模拟16位的环境,试试看这个程序能不能运行,如果可以的话,再找找XP处理这个问题的方法。
      

  14.   

    我已经替换了,致于系统的那些
    1999-05-05  22:22            65,536 WINMM.DLL
    1999-05-05  22:22           790,528 OLE32.DLL
    1999-05-05  22:22           598,288 OLEAUT32.DLL
    1999-05-05  22:22           475,136 KERNEL32.DLL
    1999-05-05  22:22            69,632 USER32.DLL
    1999-05-05  22:22           159,744 GDI32.DLL
    1999-05-05  22:22            65,536 ADVAPI32.DLL
    1999-05-05  22:22           184,320 CRTDLL.DLL
    1999-05-05  22:22           282,896 SHLWAPI.DLL
    1999-05-05  22:22           577,808 COMCTL32.DLL
    1999-05-05  22:22           143,360 MSVFW32.DLL
    1999-05-05  22:22           102,400 MSACM32.DLL
    1999-05-05  22:22            24,576 DCIMAN32.DLL
    1999-05-05  22:22         1,400,832 SHELL32.DLL
    1999-05-05  22:22            61,440 MPR.DLL
    替换有用吗??
      

  15.   

    首先打SP6A的补丁,
    然后装IE4.0把active desktop装好,
    第三再安装ie6sp1.
    第四,更新一下MDAC(ado).
    如果你的程序是32位,并且没有使用直接访问硬件的函数,那么应该就可以了.
    我很奇怪,你为什么用win2000而要使用nt4.0呢
      

  16.   

    无用的替换替换的时候记得关闭SFC,不然win2k的文件保护功能会在开机的时候把系统文件换回去的然后进入windows系统……最后你就等着重装系统吧,哈
      

  17.   

    还有一个办法,用消息绕道,用汇编修改,执行文件的PE,把文件执行从系统的DLL,转成自已的DLL,再从自己的DLL,修改消息后执行系统DLL,把系统返回的消息返回给执行程序.
    比较复杂,如果有时间,就去想想吧.:)
      

  18.   

    你用W2K就行了呀。
    至于区别:我知道Windows98好像不支持UNICODE,而WINNT下可以支持
    所以有的程序在WINNT下不能很好的执行。
      

  19.   

    我在说一遍:不可能再说一万遍:
    for(int i=0;i<10000;i++)
    {
    say("不可能~~~~~~~~~~~~~~~!!!!!!!!!!!!!!");
    }楼主还是安安心心找出程序为什么会出错,不要再妄想什么替换DLL了要不然,大家只要把2000的DLL和98的DLL换来换去,就不用装什么双系统了
    楼主的想法有点可笑:如果真的能换,微软分什么98 DKK,2000 DDK 啊,也不要出什么<<windows 2000 native api>>这本书了
      

  20.   

    都是牛人如果真的能够解决这个问题了,Bill会下岗的
      

  21.   

    代码如何丢失我也不清楚啊。程序里面用到很多com,这些com之间可能有问题,真是麻烦啊。我的想法的确有些天真,以后要多向各位学习了......