VC++Ver1.5の16ビット対応のMS_DOSアプリケーションを
VC++.NETの32ビット対応Windowsアプリケーションに移植したいのですが
_dos_getvectや_int86などサポートされていない関数が多々あります。
中にはWin32APIを利用して置き換えることができるものもあるのですが
上記のようにWin32APIに対応していないランタイム関数があります。
これらをうまく置き換える方法は無いのでしょうか。
同様の開発をしたことのある方、またはそれに関する知識をお持ちの方
よろしければご解答をお願いできないでしょうか。
よろしくお願い致します。
Win32において,ユーザーアプリケーションはハードウェアの直接アクセスは許されません。
_int86などは,個々の実行内容に合わせてAPIを使用する必要があります。
これを自動化することはできないと思います。
以前似たようなことをやりましたが、そのときは個別に対応しました。
多分それしかないです。
# 5,6年前にはそういう案件も結構ありましたが、最近はもうほとんどないですね。
getvect や int86 なんかは全面的に書き換えということになります。
プログラムの仕様を把握した上で作り直すほうが早いこともしばしば。
# 完成までの期間が短い=早い、の意味。
COM ポートを使ったプログラムなんかは
MS-DOS の頃:ハードウェアバリバリ依存で書いたほうが楽だった
Win32 : USB-232C 変換機とかあるのでハードウェア依存に書きようがない
ってなことになりかねません。
それに MS-DOS のソースそのままだと CUI かもしれませんが、
現代 Win32 アプリケーションとしては GUI 必須かもしれません。
そーーなると余計に全面書き換え、いや、【作り直し】
以外の対策は無いかもしれません。
# VT100 console Escape Sequence も使えなくなっちゃいましたし...
書き換えずにそのまま使い Windows のほうの互換性維持機能に期待する
って手もあるかもしれません。
開発コスト(期間、金額)と重要度の天秤次第でしょう。
YuOさん。いつも素早いご解答ありがとうございます。
自動化できないことは薄々感じていましたが、解答を頂き
頭を切り替えて開発に望むことができると思います。
ソースの中身を解析して、同等の機能を持つよう開発していきたいと
思います。
Banさん、tetrapodさん。本当にありがとうございます。
先程までYuOさんの御回答しか掲載されていなかったもので
お礼が遅くなって、申し訳ありません。
皆様のおっしゃる通り、個別対応法が開発コストに対し
最もリーズナブルな手法であると思いました。やはりシンプルに
その方向で開発に望んでいこうと思います。
ツイート | ![]() |