Borland C++ Ver5J による DOS Extender プログラム

Home > Borland C++ Ver5J による DOS Extender プログラム

[stub の作成方法] [コンパイル方法]

 Borland 社Borland C++ Ver5J(以下,BC5J)で DOS Extender プログラムをするためには Borland 直販PowerPack for DOS [16/32] を購入しなければならない.
注1:2000/6 現在,もう販売されていないようだ
注2:2000/9 頃から Borland C++ Suite として直販されている.(2000/7/3発表)
注3:2005/4 頃から Borland C++ 2005 Suite として一般販売されているようだ.
この Borland C++ 5.0J の BCC32.EXE はおそらく 5.02J なので pure DOS では細工が必要.
しかも TLINK32/ILINK は pure DOS では動作しない.

 しかも,この PowerPack は Borland C++ Ver4J/4.5J しかサポートされていない
 しかし,色々調べた結果,購入しなくてもなんとか実行ファイルを作成できることが判った.

DOS Extender の特徴

必要なファイル
ファイル DPMI32 DPMI16 備考
コンパイラ bcc32.exe bcc.exe 5.02J 付属のbcc32.exe は pure DOS ではパッチが必要
リンカ tlink32.exe tlink.exe 5.02J 付属の tlink32.exe は pure DOS ではダメ
ヘッダー *.h等 *.h等 既に DPMI16/32 に対応している
stub 32stub.exe 16stub.exe link時に必要
スタートアップOBJ c0x32.obj c0x.obj link時に必要
DLL用スタートアップOBJ c0d32.obj c0dl.obj link時に必要
標準ライブラリ cw32.lib cwl.lib link時に必要
数学ライブラリ (cw32.lib)
mathwl.lib
emux.lib
link時に必要
dpmiライブラリ dpmi32.lib dpmi16.lib link時に必要
rtm 32rtm.exe rtm.exe 実行時に必要
ovl dpmi32vm.ovl dpmi16bi.ovl 実行時に必要
インポートライブラリ cw32i.lib crtldll.lib run-time別でリンクした場合link時に必要
run-time cw3220.dll bc###rtl.dll run-time別でリンクした場合必要
水色はBC5Jに標準で存在するファイル.
黄色はBC5Jに存在しないが,付属のソースから作成できるファイル.
赤色はBC5Jに存在しないが,なんとかなるファイル.

16stub.exe / 32stub.exeの作成方法

BC5J のツールから抽出する. 作成した stub は BC5J の bin フォルダに置いて下さい.

実際に行ったのは,BC Ver5.02J ではなく,Ver5.01J のもので行った (Ver5.02J は,NEC の MS-DOS 環境では実行できない).
実際の抽出作業は,98DOS 環境で perl でスクリプトを書いて行ったが,同じ効果が得られるなら何でも良い.バイナリエディタとかで行うのが手っ取り早いでしょう.

BC Ver5.02J について
 Ver5.01J からのアップデートは Windows 環境がないと実行できない (バッチファイルの patch-nt.exe を以前のアップデータで使用した patch.exe に置き換えれば実行出来るかも知れません).
 しかし,パッチが当たった実行ファイルはほぼ全て英語版の EXE になるようです(stub が英語版).
 英語版の stub は exe 内部に記述されている日付が MM/DD/YY になっていて,日本語版は YY/MM/DD になっている.
 英語版なので,NEC の DOS6.2 では不具合が発生する. 英語版の EXE から抽出した 32stub.exe は動くようですが,16stub.exe は 98DOS 環境では不具合が発生した (具体的には,read only でファイルをオープンしたのにファイルを破壊された).

 この BCC32 v5.2 から __int64 がサポートされている.
pure DOS で 5.02J の BCC32.EXE を使用する場合は, GetVersionEx() と IsDBCSLeadBytesEx() が解決できないので パッチを当てる必要がある.GetVersionEx() の方は pure DOS では呼ばれないので 適当な API に名前を変えるだけで良い.IsDBCSLeadBytesEx() はパラメータを1つ 少なくして IsDBCSLeadBytes() を呼ぶように変えると良い.
ただし,引数を与えずに BCC32 を起動した場合,コンパイラオプションの表示の 最後に "Internal Compiler Error" と気持ちの悪いメッセージが表示される.


コンパイル方法

 DPMI16/32 の環境設定ですが,bcc.exe や bcc32.exe が実行できればOKです.

DPMI32
実行ファイル作成(単体動作) bcc32 -WX bar.cpp
実行ファイル作成(ランタイム別) bcc32 -WX -D_RTLDLL bar.cpp cw32i.lib
DLL作成 bcc32 -WD foo.cpp
DLL作成(ランタイム別) bcc32 -WD -D_RTLDLL foo.cpp cw32i.lib
 
DPMI16
実行ファイル作成 bcc -WX -ml bar.cpp
DLL作成 bcc -WD -ml foo.cpp


更新履歴
2000-06-15(Thu)
最初の作成
 
2001-04-13(Fri)
 
2005-04-03(Sun)
Borland C++ 2005 Suite 発売による修正.
 
2006-07-27(Thu)
リンクの修正