CSDN博客

img freewizard

WDosX与Borland Delphi

发表于2001/1/28 6:38:00  681人阅读

WDosX与Borland Delphi

  (Delphi for DOS 是基于一个叫WDosX的保护模式扩展器。WDosX扩展器不仅支持Delphi,同时支持C++Builder、TASM、VC++等几乎所有能够生成控制台应用程序的编译器,这里仅译出关于delphi的部分说明,以供参考。            ——FreeWizard)
  WDosX被设计为在dos下执行delphi程序,但并非Turbo Pascal语言,而是基于delphi的Object Pascal语言,像class,exception等都支持。
  无论在纯dos模式还是在windows下的dos方式,WDosX都将仿真Win32API调用,这意味着你可以随心所欲的使用中断和直接写屏幕缓冲区等只有在dos下才能做的事。(FreeWizard:是不是有点兴奋了?^_^)
  使用方法:
  1.编译:dcc32 -cc yourprog.dpr
  2.生成dos执行文件:stubit yourprog.exe (FreeWizard:也可以在IDE的菜单Tools中运行我做的附件:Delphi for DOS)
  当然,你也可以用{$APPTYPE CONSOLE}指示符在IDE中编译,但请别忘了去掉uses子句中的所有窗口单元,连主窗口与FORMS也不例外,否则WDosX抱怨无法注册窗口类、OLE服务和诸如此类,可别怪我。(FreeWizard:如果用了我的“添加剂”,就只要在New中的Projects页上双击Dos Application就行了!)
  你的最终执行文件需要集成Win32API仿真库或者将它们一道发布,这些模块位于BIN目录:kernel32.wdl user32.wdl oleaut32.wdl advapi32.wdl WDL文件就是DLL文件改了扩展名。
  当你使用stubit“加工”你的程序时,stubit会自动在当前目录和stubit.exe所在目录搜索上述模块,并将其与生成文件合并;若未找到则给出警告,你可以用wadd.exe自行添加。
  WDosX 0.95 附带dos与crt单元,并支持Mem与Port仿真数组,不过Mem数组已成为一维线性,例如VGA缓存mem[$A000:0000]应改为mem[$A0000],计算方法: new_offset=old_seg shl 4 + old_offset (FreeWizard:尽管WDosX支持4G寻址,但delphi只支持2G-1大小的数组,不过谁有那么多内存? :P )

  可能出现的问题——

  1. 16位tpu文件无法使用:这是当然。若有源代码可将其编译为dcu文件。
  2. 不支持FPU仿真:没办法,delphi编译器不支持,有些机器(386/486SX/586NX)上只好用软件仿真。
  3. 载入程序时出现“Unsupported dynalink”(不支持的动态连接)后跟一API函数名:这意味着你的程序使用了一个windows支持但WDosX不支持的API调用。
  4. 运行时出现:“EXCEPTION 03”(异常03):这说明你使用了一个我未曾想到的调用,尝试着根据显示的模块名和寄存器值找出问题所在,有时候可能是你的程序引入了一个事实上从未调用过的函数。
  5. 运行时出现其他CPU异常:这未必是你的错误,请先确认你的代码一切正常,再告知我。
  6. 其它问题:尝试用WuDebug解决,祝你好运!

(FreeWizard:本文译自WDosX0.95文档,更详细的资料请参见WDosX文档和站点http://fwfc.yeah.net)

 

0 0

相关博文

我的热门文章

img
取 消
img