看板 Emulator 關於我們 聯絡資訊
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エディタの使い方をよく知らなかったり(苦笑) # 検証ご協力お願いいたします>今野様 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.126.232.106 ※ 文章網址: https://www.ptt.cc/bbs/Emulator/M.1501085390.A.B18.html