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