Re: [新闻] MS-DOS Player 2017/07/27

楼主: choan (八房龙之助)   2017-07-27 00:09:47
http://takeda-toshiya.my.coocan.jp/msdos/index.html
2017/7/27
通常のMS-DOS环境上で、Win32/64のプログラムを実行すると、
This program cannot be run in DOS mode.
と表示されて、そのままプログラムが终了するようになっています。
これは、Win32の実行ファイルのヘッダ内に、このようなメッセージを表示して
そのまま终了するようなMS-DOS用スタブプログラムが埋め込まれて、
MS-DOS环境ではそちらが実行されるようになっているからです。
MS-DOS Player上でWin32のプログラムを実行した场合も同様の动作でしたが、
INT 21h, AX=4B00h, INT 2Eh, またはINT 2Fh, AX=AE01hなどのサービスで、
Win32のプログラムを子プロセスとして起动しようとした场合は、
system() Win32 APIを使って、Win32の子プロセスとして実行するようにしました。
このとき、子プロセスが终了するまで、MS-DOS Playerは待机します。
ただし、INT 21h, AX=4B01h/4B03hなど、プログラムファイルをロードするだけで、
実际には実行しない场合は、プログラムファイルがそのままロードされます。
その后に、メモリ上にロードしたプログラムに処理が移った场合は、従来通り、
This program cannot be run in DOS mode.が表示されて终わりです。
なお、指定されたコマンドラインをそのまま丸ごと、system()に投げています。
16bitのプログラムとパイプで繋ぐようなケースは考虑していません。
また、子プロセスがコンソールに文字を表示する际、MS-DOS Player侧のINT 29hは
経由されませんのでご注意ください。
こちらの処理は、あくまで子プロセスの起动时のみとなります。
“msdos (プログラム名)”で起动时に指定したプログラムがWin32の场合は、
This program cannot be run in DOS mode.が表示されますが、
この场合は素直に対象のプログラムを直接起动してください、ということで(を
MS-DOS PlayerでCOMMAND.COMを実行して、その上でWin32のコンソールアプリを
シームレスに使用できるようになっているかと思います。
Windows上でVZエディタを使用する际、CLPPST.EXEというWin32のプログラムを使って、
Windows侧のクリップボードと连携しているそうです。
今回の修正で、この仕组みが动くようになっているといいのですが…。
素直にINT 21h, AX=4B00h辺りを使っててくれれば大丈夫だと思うんですけどね。
# DOS时代はSEDIT派でしたので、VZエディタの使い方をよく知らなかったり(苦笑)
# 検証ご协力お愿いいたします>今野様

Links booklink

Contact Us: admin [ a t ] ucptt.com