Article View: ca.test
Article #9279test-ignore別のファイル
From: test3
Date: Thu, 26 Oct 1995 00:00
Date: Thu, 26 Oct 1995 00:00
1902 lines
100656 bytes
100656 bytes
README.WRI File
ReadMe File for Microsoft(R) Visual C++(TM) Development System for Windows(TM),
Version 1.5
(C) Copyright Microsoft Corporation, 1995
目次
章 タイトル
1 システムの設定
2 Visual Workbench
3 App Studio
4 SDK, MFC, OLE, CDK サンプル ファイル
5 CL コンパイラ
6 CodeView
7 Microsoft Foundation Class ライブラリ
8 プロファイラ
9 C ランタイム ライブラリ
10 Books Online
11 その他の注意点
12 確認されているランタイムライブラリの不具合
チェック ボックスのテキストが表示されない場合がある 第 1 章 システムの設定
CONFIG.SYS ファイルにおける FILES= パラメータの設定
CONFIG.SYS ファイルで設定する FILES の個数は、少なくとも 50 以上でなけれ
ばなりません。CONFIG.SYS ファイル内に次の行が記述されていることを確認してく
ださい。
FILES=50
SHARE.EXE の使用について
Microsoft Visual C++ では、SHARE.EXE (DOSに付属)がインストールされていな
ければなりません。特に、大規模なプロジェクトのビルドには、SHAREのバッファサ
イズを大きく指定する必要があります。このバッファサイズは、/Fスイッチによって
指定できます(例 /F:5120 )。
SHAREがロードされていない場合には、Visual C++ を起動する前にSHAREを起動
してください。Windowsを終了し、コマンドラインより SHARE /F:5120 を実行し
Windowsを再起動してください。また、AUTOEXEC.BAT に追加することにより、
Windows起動前に必ずロードするようにできます。
すでに AUTOEXEC.BAT により SHARE を起動している場合には、SHARE のス
イッチとして /F:5120 があることを確認してください。スイッチを変更した場合には、
システムを再起動して、新たにSHAREをロードする必要があります。
Microsoft Visual C++ の DBC パスへのインストール (DOS/V 版の場合)
2 バイト文字または 1 バイトのカタカナ文字のパスに Microsoft Visual C++ をイ
ンストールするときは、インストールするときに多少調整を行う必要があります。こ
れは一部のビデオ ドライバとの上位互換性を保つために必要な措置であり、この調
整を行わない場合はプログラムを正しくビルドできません。
Visual C++ では、ビルド中にバックグラウンドにおいて非表示の Virtual Machine
(VM) が Visual Workbench によって生成されます。ビルド ユーティリティはその
VM の中で実行されます。ただし、一部のビデオ カードでは、非表示の日本語 VM
がバックグラウンドで実行できないため、最初に VM を 英語モードで生成した後、
日本語モードに切り替える処理が行われます。このため、WINTEER.EXE ファイルは
2 バイト文字または 1 バイトのカタカナ文字を含まない名前のパス上になければな
りません。
Visual C++ を2 バイト文字または 1 バイトのカタカナ文字をパス名に含むパス上
にインストールするには
1. Setup プログラムを起動して、ソフトウェアを希望するディレクトリにインストー
ルします。
2. WINTEER.EXE ファイルをインストールしたディレクトリ (初期値ではMSVC\BIN
です) からハード ディスクのルート ディレクトリか、2 バイト文字または 1 バ
イトのカタカナ文字のいずれのパス名も持たない別のディレクトリにコピーします。
3. Windows の PIF エディタを使ってソフトウェアのインストール先の \BIN ディレ
クトリにある WINTEE.PIF ファイルをオープンし、WINTEER.EXE の新しい保存
ディレクトリを指すように [プログラムのファイル名] と [起動時のディレクト
リ] のエントリを変更します。
4. PIF ファイルを保存して PIF エディタを終了します。
5. 初期化を確実に行うために、いったん MSVC を終了して Windows を再起動しま
す。
これで Visual C++ が正常に動作するようになります。
ネットワーク上での使用
Visual C++ は、すべてのファイル (テンポラリ ファイル、オブジェクト ファイル
など) が、ローカル マシンのハードディスク上に存在する必要があります。
その他のシステム設定情報
システム設定とハードウェア構成に関連する重要な注意点が CONFIG.WRI ファイ
ルに記載されているので参照してください。このファイルは Visual C++ に含まれて
いる ReadMe Tech Note Viewerで画面に表示できます。
OLE オートメーション クラスを作成するための準備
Visual C++ 1.5 を Windows NT 3.5 にインストールし、ネットワーク アダプタをイ
ンストールしなかった場合、OLE アプリケーションを作成するために CDK から
Class Wizard をインストールする必要があります。Class Wizard をインストールする
には、Visual C++ CD から \MSVCCDK\MFCCLSWZ.DLL を インストール先のBIN
ディレクトリ(初期値では\MSVC\BIN) ディレクトリにコピーし、
\MSVCCDK\MSVC.HLP を HELP ディレクトリ( 初期値では \MSVC\HELP) にコピ
ーします。この操作は、Windows NT 3.5 の問題を回避するために必要です。これらの
ファイルをインストールしないと、OLE オートメーションを使ったクラスを作成した
ときに次のエラー メッセージが表示されます。
"Unable to generate a valid GUID. Check to make sure OLE 2.01 or later is properly
installed."
メッセージのない ビルド エラー
利用可能なメモリが少ない場合、リソースコンパイラやリンカからエラーが発生す
ることがあります。利用可能なコンベンショナル メモリを 450KB よりも大きく設定
してください。システム設定を変更してコンベンショナル メモリの容量を増やす方
法については、MS-DOS のユーザーズ マニュアルを参照してください。
第 2 章 Visual Workbench
Visual Workbench のウィンドウが表示されない場合がある
Visual Workbench のウィンドウをアイコン化したまま Windows を終了した場合、
次に Visual Workbench を開始したときに画面に表示されないことがあります。これ
は次に示す 3 つの操作を同時に実行したときに発生します。
■ Visual Workbench のフレーム内で Visual Workbench の子ウィンドウをアイコ
ン化する
■ Visual Workbench をアイコン化する
■ 上の状態で Visual Workbench を起動した Windows を終了する
第 1 章 システムの設定
CONFIG.SYS ファイルにおける FILES= パラメータの設定
CONFIG.SYS ファイルで設定する FILES の個数は、少なくとも 50 以上でなけれ
ばなりません。CONFIG.SYS ファイル内に次の行が記述されていることを確認してく
ださい。
FILES=50
SHARE.EXE の使用について
Microsoft Visual C++ では、SHARE.EXE (DOSに付属)がインストールされていな
ければなりません。特に、大規模なプロジェクトのビルドには、SHAREのバッファサ
イズを大きく指定する必要があります。このバッファサイズは、/Fスイッチによって
指定できます(例 /F:5120 )。
SHAREがロードされていない場合には、Visual C++ を起動する前にSHAREを起動
してください。Windowsを終了し、コマンドラインより SHARE /F:5120 を実行し
Windowsを再起動してください。また、AUTOEXEC.BAT に追加することにより、
Windows起動前に必ずロードするようにできます。
すでに AUTOEXEC.BAT により SHARE を起動している場合には、SHARE のス
イッチとして /F:5120 があることを確認してください。スイッチを変更した場合には、
システムを再起動して、新たにSHAREをロードする必要があります。
Microsoft Visual C++ の DBC パスへのインストール (DOS/V 版の場合)
2 バイト文字または 1 バイトのカタカナ文字のパスに Microsoft Visual C++ をイ
ンストールするときは、インストールするときに多少調整を行う必要があります。こ
れは一部のビデオ ドライバとの上位互換性を保つために必要な措置であり、この調
整を行わない場合はプログラムを正しくビルドできません。
Visual C++ では、ビルド中にバックグラウンドにおいて非表示の Virtual Machine
(VM) が Visual Workbench によって生成されます。ビルド ユーティリティはその
VM の中で実行されます。ただし、一部のビデオ カードでは、非表示の日本語 VM
がバックグラウンドで実行できないため、最初に VM を 英語モードで生成した後、
日本語モードに切り替える処理が行われます。このため、WINTEER.EXE ファイルは
2 バイト文字または 1 バイトのカタカナ文字を含まない名前のパス上になければな
りません。
Visual C++ を2 バイト文字または 1 バイトのカタカナ文字をパス名に含むパス上
にインストールするには
1. Setup プログラムを起動して、ソフトウェアを希望するディレクトリにインストー
ルします。
2. WINTEER.EXE ファイルをインストールしたディレクトリ (初期値ではMSVC\BIN
です) からハード ディスクのルート ディレクトリか、2 バイト文字または 1 バ
イトのカタカナ文字のいずれのパス名も持たない別のディレクトリにコピーします。
3. Windows の PIF エディタを使ってソフトウェアのインストール先の \BIN ディレ
クトリにある WINTEE.PIF ファイルをオープンし、WINTEER.EXE の新しい保存
ディレクトリを指すように [プログラムのファイル名] と [起動時のディレクト
リ] のエントリを変更します。
4. PIF ファイルを保存して PIF エディタを終了します。
5. 初期化を確実に行うために、いったん MSVC を終了して Windows を再起動しま
す。
これで Visual C++ が正常に動作するようになります。
ネットワーク上での使用
Visual C++ は、すべてのファイル (テンポラリ ファイル、オブジェクト ファイル
など) が、ローカル マシンのハードディスク上に存在する必要があります。
その他のシステム設定情報
システム設定とハードウェア構成に関連する重要な注意点が CONFIG.WRI ファイ
ルに記載されているので参照してください。このファイルは Visual C++ に含まれて
いる ReadMe Tech Note Viewerで画面に表示できます。
OLE オートメーション クラスを作成するための準備
Visual C++ 1.5 を Windows NT 3.5 にインストールし、ネットワーク アダプタをイ
ンストールしなかった場合、OLE アプリケーションを作成するために CDK から
Class Wizard をインストールする必要があります。Class Wizard をインストールする
には、Visual C++ CD から \MSVCCDK\MFCCLSWZ.DLL を インストール先のBIN
ディレクトリ(初期値では\MSVC\BIN) ディレクトリにコピーし、
\MSVCCDK\MSVC.HLP を HELP ディレクトリ( 初期値では \MSVC\HELP) にコピ
ーします。この操作は、Windows NT 3.5 の問題を回避するために必要です。これらの
ファイルをインストールしないと、OLE オートメーションを使ったクラスを作成した
ときに次のエラー メッセージが表示されます。
"Unable to generate a valid GUID. Check to make sure OLE 2.01 or later is properly
installed."
第 1 章 システムの設定
CONFIG.SYS ファイルにおける FILES= パラメータの設定
CONFIG.SYS ファイルで設定する FILES の個数は、少なくとも 50 以上でなけれ
ばなりません。CONFIG.SYS ファイル内に次の行が記述されていることを確認してく
ださい。
FILES=50
SHARE.EXE の使用について
Microsoft Visual C++ では、SHARE.EXE (DOSに付属)がインストールされていな
ければなりません。特に、大規模なプロジェクトのビルドには、SHAREのバッファサ
イズを大きく指定する必要があります。このバッファサイズは、/Fスイッチによって
指定できます(例 /F:5120 )。
SHAREがロードされていない場合には、Visual C++ を起動する前にSHAREを起動
してください。Windowsを終了し、コマンドラインより SHARE /F:5120 を実行し
Windowsを再起動してください。また、AUTOEXEC.BAT に追加することにより、
Windows起動前に必ずロードするようにできます。
すでに AUTOEXEC.BAT により SHARE を起動している場合には、SHARE のス
イッチとして /F:5120 があることを確認してください。スイッチを変更した場合には、
システムを再起動して、新たにSHAREをロードする必要があります。
Microsoft Visual C++ の DBC パスへのインストール (DOS/V 版の場合)
2 バイト文字または 1 バイトのカタカナ文字のパスに Microsoft Visual C++ をイ
ンストールするときは、インストールするときに多少調整を行う必要があります。こ
れは一部のビデオ ドライバとの上位互換性を保つために必要な措置であり、この調
整を行わない場合はプログラムを正しくビルドできません。
Visual C++ では、ビルド中にバックグラウンドにおいて非表示の Virtual Machine
(VM) が Visual Workbench によって生成されます。ビルド ユーティリティはその
VM の中で実行されます。ただし、一部のビデオ カードでは、非表示の日本語 VM
がバックグラウンドで実行できないため、最初に VM を 英語モードで生成した後、
日本語モードに切り替える処理が行われます。このため、WINTEER.EXE ファイルは
2 バイト文字または 1 バイトのカタカナ文字を含まない名前のパス上になければな
りません。
Visual C++ を2 バイト文字または 1 バイトのカタカナ文字をパス名に含むパス上
にインストールするには
1. Setup プログラムを起動して、ソフトウェアを希望するディレクトリにインストー
ルします。
2. WINTEER.EXE ファイルをインストールしたディレクトリ (初期値ではMSVC\BIN
です) からハード ディスクのルート ディレクトリか、2 バイト文字または 1 バ
イトのカタカナ文字のいずれのパス名も持たない別のディレクトリにコピーします。
3. Windows の PIF エディタを使ってソフトウェアのインストール先の \BIN ディレ
クトリにある WINTEE.PIF ファイルをオープンし、WINTEER.EXE の新しい保存
ディレクトリを指すように [プログラムのファイル名] と [起動時のディレクト
リ] のエントリを変更します。
4. PIF ファイルを保存して PIF エディタを終了します。
5. 初期化を確実に行うために、いったん MSVC を終了して Windows を再起動しま
す。
これで Visual C++ が正常に動作するようになります。
ネットワーク上での使用
Visual C++ は、すべてのファイル (テンポラリ ファイル、オブジェクト ファイル
など) が、ローカル マシンのハードディスク上に存在する必要があります。
その他のシステム設定情報
システム設定とハードウェア構成に関連する重要な注意点が CONFIG.WRI ファイ
ルに記載されているので参照してください。このファイルは Visual C++ に含まれて
いる ReadMe Tech Note Viewerで画面に表示できます。
OLE オートメーション クラスを作成するための準備
Visual C++ 1.5 を Windows NT 3.5 にインストールし、ネットワーク アダプタをイ
ンストールしなかった場合、OLE アプリケーションを作成するために CDK から
Class Wizard をインストールする必要があります。Class Wizard をインストールする
には、Visual C++ CD から \MSVCCDK\MFCCLSWZ.DLL を インストール先のBIN
ディレクトリ(初期値では\MSVC\BIN) ディレクトリにコピーし、
\MSVCCDK\MSVC.HLP を HELP ディレクトリ( 初期値では \MSVC\HELP) にコピ
ーします。この操作は、Windows NT 3.5 の問題を回避するために必要です。これらの
ファイルをインストールしないと、OLE オートメーションを使ったクラスを作成した
ときに次のエラー メッセージが表示されます。
"Unable to generate a valid GUID. Check to make sure OLE 2.01 or later is properly
installed."
メッセージのない ビルド エラー
利用可能なメモリが少ない場合、リソースコンパイラやリンカからエラーが発生す
ることがあります。利用可能なコンベンショナル メモリを 450KB よりも大きく設定
してください。システム設定を変更してコンベンショナル メモリの容量を増やす方
法については、MS-DOS のユーザーズ マニュアルを参照してください。
第 2 章 Visual Workbench
Visual Workbench のウィンドウが表示されない場合がある
Visual Workbench のウィンドウをアイコン化したまま Windows を終了した場合、
次に Visual Workbench を開始したときに画面に表示されないことがあります。これ
は次に示す 3 つの操作を同時に実行したときに発生します。
■ Visual Workbench のフレーム内で Visual Workbench の子ウィンドウをアイコ
ン化する
■ Visual Workbench をアイコン化する
■ 上の状態で Visual Workbench を起動した Windows を終了する
ここで Windows と Visual Workbench を順番に再起動すると、アイコン化された
MDI 子ウィンドウはアイコン化されたままになっています。これを元のサイズに戻そ
うとすると、オープンされたウィンドウは画面のサイズをはみ出します。ここで
ALT+- (ALT + マイナス) キーを押すと、表示されなかったウィンドウのシステム メ
ニューが表示されます。ここでウィンドウをクローズし、その後再びオープンします。
このような状態にならないためには、Visual Workbench が実行中でしかもアイコン
化されているときに Windows を終了しないようにしてください。
強制的に Visual Workbench デバッガに制御を移す
Visual Workbench デバッガは、CodeView と違ってデバッグ対象のプログラムの実
行中にソース ファイルにブレークポイントを設定できるため、設定したブレークポ
イントでプログラムの実行を中断できます。無限ループなどの理由によりプログラム
を中断するためのブレークポイントを設定できない場合は、CTRL+ALT+SYSREQ
( NEC版では CTRL+ALT+STOP ) キーを押してプログラムを中断できます。この方法
で実行を中断すると、プログラムの制御は Visual Workbench デバッガに戻ります。
なお、Windows などのシステム コードの実行中にプログラムを中断すると、予測
できない結果が生じる場合がありますので注意してください。
第 1 章 システムの設定
CONFIG.SYS ファイルにおける FILES= パラメータの設定
CONFIG.SYS ファイルで設定する FILES の個数は、少なくとも 50 以上でなけれ
ばなりません。CONFIG.SYS ファイル内に次の行が記述されていることを確認してく
ださい。
FILES=50
SHARE.EXE の使用について
Microsoft Visual C++ では、SHARE.EXE (DOSに付属)がインストールされていな
ければなりません。特に、大規模なプロジェクトのビルドには、SHAREのバッファサ
イズを大きく指定する必要があります。このバッファサイズは、/Fスイッチによって
指定できます(例 /F:5120 )。
SHAREがロードされていない場合には、Visual C++ を起動する前にSHAREを起動
してください。Windowsを終了し、コマンドラインより SHARE /F:5120 を実行し
Windowsを再起動してください。また、AUTOEXEC.BAT に追加することにより、
Windows起動前に必ずロードするようにできます。
すでに AUTOEXEC.BAT により SHARE を起動している場合には、SHARE のス
イッチとして /F:5120 があることを確認してください。スイッチを変更した場合には、
システムを再起動して、新たにSHAREをロードする必要があります。
Microsoft Visual C++ の DBC パスへのインストール (DOS/V 版の場合)
2 バイト文字または 1 バイトのカタカナ文字のパスに Microsoft Visual C++ をイ
ンストールするときは、インストールするときに多少調整を行う必要があります。こ
れは一部のビデオ ドライバとの上位互換性を保つために必要な措置であり、この調
整を行わない場合はプログラムを正しくビルドできません。
Visual C++ では、ビルド中にバックグラウンドにおいて非表示の Virtual Machine
(VM) が Visual Workbench によって生成されます。ビルド ユーティリティはその
VM の中で実行されます。ただし、一部のビデオ カードでは、非表示の日本語 VM
がバックグラウンドで実行できないため、最初に VM を 英語モードで生成した後、
日本語モードに切り替える処理が行われます。このため、WINTEER.EXE ファイルは
2 バイト文字または 1 バイトのカタカナ文字を含まない名前のパス上になければな
りません。
Visual C++ を2 バイト文字または 1 バイトのカタカナ文字をパス名に含むパス上
にインストールするには
1. Setup プログラムを起動して、ソフトウェアを希望するディレクトリにインストー
ルします。
2. WINTEER.EXE ファイルをインストールしたディレクトリ (初期値ではMSVC\BIN
です) からハード ディスクのルート ディレクトリか、2 バイト文字または 1 バ
イトのカタカナ文字のいずれのパス名も持たない別のディレクトリにコピーします。
3. Windows の PIF エディタを使ってソフトウェアのインストール先の \BIN ディレ
クトリにある WINTEE.PIF ファイルをオープンし、WINTEER.EXE の新しい保存
ディレクトリを指すように [プログラムのファイル名] と [起動時のディレクト
リ] のエントリを変更します。
4. PIF ファイルを保存して PIF エディタを終了します。
5. 初期化を確実に行うために、いったん MSVC を終了して Windows を再起動しま
す。
これで Visual C++ が正常に動作するようになります。
ネットワーク上での使用
Visual C++ は、すべてのファイル (テンポラリ ファイル、オブジェクト ファイル
など) が、ローカル マシンのハードディスク上に存在する必要があります。
その他のシステム設定情報
システム設定とハードウェア構成に関連する重要な注意点が CONFIG.WRI ファイ
ルに記載されているので参照してください。このファイルは Visual C++ に含まれて
いる ReadMe Tech Note Viewerで画面に表示できます。
OLE オートメーション クラスを作成するための準備
Visual C++ 1.5 を Windows NT 3.5 にインストールし、ネットワーク アダプタをイ
ンストールしなかった場合、OLE アプリケーションを作成するために CDK から
Class Wizard をインストールする必要があります。Class Wizard をインストールする
には、Visual C++ CD から \MSVCCDK\MFCCLSWZ.DLL を インストール先のBIN
ディレクトリ(初期値では\MSVC\BIN) ディレクトリにコピーし、
\MSVCCDK\MSVC.HLP を HELP ディレクトリ( 初期値では \MSVC\HELP) にコピ
ーします。この操作は、Windows NT 3.5 の問題を回避するために必要です。これらの
ファイルをインストールしないと、OLE オートメーションを使ったクラスを作成した
ときに次のエラー メッセージが表示されます。
"Unable to generate a valid GUID. Check to make sure OLE 2.01 or later is properly
installed."
メッセージのない ビルド エラー
利用可能なメモリが少ない場合、リソースコンパイラやリンカからエラーが発生す
ることがあります。利用可能なコンベンショナル メモリを 450KB よりも大きく設定
してください。システム設定を変更してコンベンショナル メモリの容量を増やす方
法については、MS-DOS のユーザーズ マニュアルを参照してください。
第 2 章 Visual Workbench
Visual Workbench のウィンドウが表示されない場合がある
Visual Workbench のウィンドウをアイコン化したまま Windows を終了した場合、
次に Visual Workbench を開始したときに画面に表示されないことがあります。これ
は次に示す 3 つの操作を同時に実行したときに発生します。
■ Visual Workbench のフレーム内で Visual Workbench の子ウィンドウをアイコ
ン化する
■ Visual Workbench をアイコン化する
■ 上の状態で Visual Workbench を起動した Windows を終了する
ここで Windows と Visual Workbench を順番に再起動すると、アイコン化された
MDI 子ウィンドウはアイコン化されたままになっています。これを元のサイズに戻そ
うとすると、オープンされたウィンドウは画面のサイズをはみ出します。ここで
ALT+- (ALT + マイナス) キーを押すと、表示されなかったウィンドウのシステム メ
ニューが表示されます。ここでウィンドウをクローズし、その後再びオープンします。
このような状態にならないためには、Visual Workbench が実行中でしかもアイコン
化されているときに Windows を終了しないようにしてください。
強制的に Visual Workbench デバッガに制御を移す
Visual Workbench デバッガは、CodeView と違ってデバッグ対象のプログラムの実
行中にソース ファイルにブレークポイントを設定できるため、設定したブレークポ
イントでプログラムの実行を中断できます。無限ループなどの理由によりプログラム
を中断するためのブレークポイントを設定できない場合は、CTRL+ALT+SYSREQ
( NEC版では CTRL+ALT+STOP ) キーを押してプログラムを中断できます。この方法
で実行を中断すると、プログラムの制御は Visual Workbench デバッガに戻ります。
なお、Windows などのシステム コードの実行中にプログラムを中断すると、予測
できない結果が生じる場合がありますので注意してください。
メッセージのない ビルド エラー
利用可能なメモリが少ない場合、リソースコンパイラやリンカからエラーが発生す
ることがあります。利用可能なコンベンショナル メモリを 450KB よりも大きく設定
してください。システム設定を変更してコンベンショナル メモリの容量を増やす方
法については、MS-DOS のユーザーズ マニュアルを参照してください。
第 2 章 Visual Workbench
Visual Workbench のウィンドウが表示されない場合がある
Visual Workbench のウィンドウをアイコン化したまま Windows を終了した場合、
次に Visual Workbench を開始したときに画面に表示されないことがあります。これ
は次に示す 3 つの操作を同時に実行したときに発生します。
■ Visual Workbench のフレーム内で Visual Workbench の子ウィンドウをアイコ
ン化する
■ Visual Workbench をアイコン化する
■ 上の状態で Visual Workbench を起動した Windows を終了する
ここで Windows と Visual Workbench を順番に再起動すると、アイコン化された
MDI 子ウィンドウはアイコン化されたままになっています。これを元のサイズに戻そ
うとすると、オープンされたウィンドウは画面のサイズをはみ出します。ここで
ALT+- (ALT + マイナス) キーを押すと、表示されなかったウィンドウのシステム メ
ニューが表示されます。ここでウィンドウをクローズし、その後再びオープンします。
このような状態にならないためには、Visual Workbench が実行中でしかもアイコン
化されているときに Windows を終了しないようにしてください。
強制的に Visual Workbench デバッガに制御を移す
Visual Workbench デバッガは、CodeView と違ってデバッグ対象のプログラムの実
行中にソース ファイルにブレークポイントを設定できるため、設定したブレークポ
イントでプログラムの実行を中断できます。無限ループなどの理由によりプログラム
を中断するためのブレークポイントを設定できない場合は、CTRL+ALT+SYSREQ
( NEC版では CTRL+ALT+STOP ) キーを押してプログラムを中断できます。この方法
で実行を中断すると、プログラムの制御は Visual Workbench デバッガに戻ります。
なお、Windows などのシステム コードの実行中にプログラムを中断すると、予測
できない結果が生じる場合がありますので注意してください。
ここで Windows と Visual Workbench を順番に再起動すると、アイコン化された
MDI 子ウィンドウはアイコン化されたままになっています。これを元のサイズに戻そ
うとすると、オープンされたウィンドウは画面のサイズをはみ出します。ここで
ALT+- (ALT + マイナス) キーを押すと、表示されなかったウィンドウのシステム メ
ニューが表示されます。ここでウィンドウをクローズし、その後再びオープンします。
このような状態にならないためには、Visual Workbench が実行中でしかもアイコン
化されているときに Windows を終了しないようにしてください。
強制的に Visual Workbench デバッガに制御を移す
Visual Workbench デバッガは、CodeView と違ってデバッグ対象のプログラムの実
行中にソース ファイルにブレークポイントを設定できるため、設定したブレークポ
イントでプログラムの実行を中断できます。無限ループなどの理由によりプログラム
を中断するためのブレークポイントを設定できない場合は、CTRL+ALT+SYSREQ
( NEC版では CTRL+ALT+STOP ) キーを押してプログラムを中断できます。この方法
で実行を中断すると、プログラムの制御は Visual Workbench デバッガに戻ります。
なお、Windows などのシステム コードの実行中にプログラムを中断すると、予測
できない結果が生じる場合がありますので注意してください。
Windows の色設定によっては無効になったチェック ボックスのテキストが表示さ
れないことがあります。この場合はコントロール パネルの [画面の色] ダイアログを
開いて、反転表示の文字 の色を明るい灰色以外の色に変更するか、またはボタンの
表面を明るい灰色に設定してください。
Visual Workbench デバッガと CodeView for Windows の利用
Visual Workbench デバッガと CodeView for Windows は同時には使えません。
CodeView for Windows の実行中に Visual Workbench デバッガを起動すると、エラー
(Unknown Error in Windows ( -22 )) が生じます。
[Stop Debugging] コマンドと [Restart] コマンドの使い方
[Stop Debugging]コマンドおよび [Restart] コマンドは、どうしても必要なとき以外
は使わないようにしてください。中断されるアプリケーションはリソースやメモリを
解放することができず、また使用中の DLL もアンロードできないため、デバッグ セ
ッションの開始時と終了時には問題が生じる場合がありますが、これらのコマンドを
できるだけ使わないことによってトラブルが発生する可能性は減ります。
変数を表示する QuickWatch のオープン
デバッグ中にツールバーの 検索ボックスに変数名を入力して SHIFT+F9 キーを
押すと、QuickWatch ダイアログ ボックスをオープンして変数を表示できます。デバ
ッグ セッションの実行中かどうかにかかわりなく、ツールバーの検索ボックスの設
定に対してショートカット キー F1 (ヘルプ)、F11 (定義位置を表示) SHIFT+F11 (参照
位置を表示) が有効に機能します。
SPY.EXE 実行中のデバッグ
Visual Workbench デバッガによるデバッグ セッションにおいて SPY.EXE プログ
ラムを使う場合は、SPY コマンドを選択するのはデバッグ対象のプログラムの実行中
に限ります。SPY を使ってウォッチするウィンドウを選択したり、デバッグ中のプロ
グラムがブレークポイントにあるときに SPY をクローズしたりしないでください。
いずれの場合も、SPY と Visual Workbench が暴走することがあります。
システムレベル フックのデバッグ
Visual WorkBench デバッガは、停止中に呼出されるのを防ぐためデバッグ対象のプ
ログラム上にタスクレベルのフックを設定する必要があります。このため、デバッガ
がデバッグできるのはデバッグ対象のプログラムが自分自身で設定したタスクレベル
のフックのみに限られます。
例 ( デバッグ対象のコード):
SetWindowsHookEx(hookProc,hInstance,GetCurrentTask( )) ;
MS-DOS 用プログラムのデバッグ
内蔵のデバッガを使って MS-DOS 用プログラムをデバッグするには、最初に MS-
DOS 用プログラムを QuickWin アプリケーションとしてビルドした後、Visual
Workbench を使ってデバッグします。そして、デバッグ完了後にあらためて MS-DOS
アプリケーションとしてビルドし直します。
MS-DOS オーバレイ アプリケーションのビルド
MS-DOS オーバレイ アプリケーションを Visual Workbench 上でビルドする場合は、
プロジェクト リスト内にモジュール定義ファイル (.DEF) が必要です。Windows 対
応のプロジェクト タイプと異なり、MS-DOS オーバレイ アプリケーションでは、必
要なモジュール定義ファイルが含まれていなくても警告されないので注意してくださ
い。
MFC オンライン ヘルプの < Hierarchy > ボタンのショートカット キー
< Hierarchy > ボタンを選択すると、クラスの階層構造を示すチャートがポップアップ
ウィンドウに表示されます。ポップアップ ウィンドウは ALT キーと別のキーを組み
合わせて押しても起動できません。階層構造チャートをキーボード操作によって表示
するには、 CTRL+I キーか、または ALT+I キーのかわりに I キーのみ押してくだ
さい。
外部メイクファイルにおける MS-DOS コマンド ライン プロンプトの処理
Visual Workbench で外部メイクファイルを使う場合は、MS-DOS のコマンド ライ
ン プロンプトからの入力を必要とするコマンドをあらかじめすべて取り除いておい
てください。Visual Workbench は外部メイクファイル内のプロンプトを認識できない
ため、ビルドを中断してシステムがハング アップする原因となります。
VBX コントロールのビルド
VBX コントロールをビルドするには、リンカが参照する追加ライブラリのリスト
に VBAPI.LIB ライブラリを加えておく必要があります。このライブラリは [Options]
- [Project] ダイアログ ボックスで選択した後で、リンカ オプション ダイアログ ボ
ックスの [Miscellaneous] オプションを選択します。[Other Options] フィールドでは
/LIB:"path\VBAPI" を設定します。ここで path\ には VBAPI.LIB ファイルがインス
トールされているディレクトリを指定します。
なお、VBX コントロールを作成するためには、別途 Control Development Kit (CDK)
が必要です。
VBX Visible プロパティの利用
VBX コントロールの Visible プロパティは、実行時にのみ変更できます。つまり、
AppStudio または .RC ファイルで最初から不可視の状態の VBX コントロールを作
成することはできません。コントロールを不可視な状態にするには、コード上でコン
トロールを表示しないように指定してください。
ダイアログのコントロールを最初から不可視の状態にするには、CDialog 派生クラ
スの OnInitDialog 関数を無効にしてから、表示しないコントロールに対して次の例の
ように ShowWindow( SW_HIDE ) を呼び出します。
BOOL CMyDialog::OnInitDialog
{
CDialog::OnInitDialog();
// make the control identified by IDC_GRID1 invisible
GetDlgItem(IDC_GRID1)->ShowWindow(SW_HIDE);
// other dialog initializations...
}
Visual Basic Profe
ルのビルド
Visual Basic Professional Editionで提供される VBX コントロールのサンプルを
Visual C++ で利用するためには、スモール メモリ モデルを使ってビルドする必要が
あります。
#pragma optimize コマンドの利用
ソース コード内で #pragma optimize コマンドを使うと、Visual Workbench プロジ
ェクトのファイルまたは関数の最適化オプションを制御できます。
このコマンドは必ず関数本体の外に記述します。構文は次に示すとおりです。
#pragma optimize( "[optimization switch list]", {off | on} )
最適化スイッチは次の中から選択し、何も指定しなくてもかまいません。
'a', 'w', 't', 's', 'c', 'g', 'e', 'l', 'p', z', 'n', 'r', 'o', 'q', 'f', 'v'.
これらの文字はコンパイラの /O オプションで指定する文字と同じです。例を次に示
します。
#pragma optimize( "lge", off )
文字を指定しない場合、次のように設定すると p-code 以外のすべての最適化がオフ
になります。
('q'):
#pragma optimize( "", off )
また、次のように設定するとそのプロジェクトにもともと設定されているすべての最
適化スイッチがオンになります。
#pragma optimize( "", on )
プラグマについて詳しくは、C/C++ 言語リファレンス オンライン ヘルプの 'pragma'
のトピックを参照してください。
ATI Ultra ディスプレイ アダプタ使用時のデバッグ
Visual Workbench のデバッグを ATI Ultra ディスプレイ アダプタを使って行って
いる場合、コードの実行中に INT 3 の割り込みが発生することがあります。この問
題は、新バージョンのディスプレイ ドライバでは解決されている可能性があります。
VIPER のディスプレイ ドライバでビルド途中で画面が崩れる
コンパイル時に使用する wintee.pif はコードページを "932" に切り替え、"英語モ
ード"、"バックグランドでも実行" で実行しますのでこの状態で DOS 互換ボックス
が正常に動かない機種ではコンパイルが正常にできません。
対策
====
1.PIF エディターで \MSVC\BIN の WINTEE.PIF を読み込みます。
2.そして画面モードを初期状態の英語モード(N)から日本語モード(J)に変更
します。
これで直ればいいのですが、ビルドが途中で止まってしまったりする事が
あります。その時は、
3.「詳細設定」の中の画面表示の設定のテキスト モード エミレーション(E)のチェックを
外してみてください。
ハード モードのデバッグ中に無効になるコントロールがある
ハードモード でのデバッグ中には、一部のコントロールはマウスの入力を受け付
けなくなります。すべてのコンボ ボックスとツールバー上の [プロジェクト ファ
イル] ボタンもこれに含まれます。この場合は、それらのコントロールにはキーボー
ドからアクセスしなければなりません。
ハード モードにおけるコンボ リスト ボックスの使い方
ハード モードでのデバッグ中にブレークポイントで実行を中断した場合、コンボ
リスト ボックスに対するマウスのクリックは正しく処理されないことがあります。
この場合、Visual Workbench 上でこれらのコンボ リスト ボックスにアクセスするに
はキーボード コマンドを使ってください。
Class Wizard を使ってプロジェクトにファイルを追加する
Class Wizard を使ってプロジェクトにファイルを追加した後は、[Scan All
Dependencies]コマンドを実行してください。これによって、追加したファイルを含め
たファイルの依存関係が更新されます。
[Resources] ダイアログ ボックス
AppWizard を使って新しいアプリケーションのスケルトンを作成してから
[Options] メニューの [Project] コマンドを選択して [Resources] ダイアログ ボックス
を開くと、"Custom Options" フィールドに無意味な文字が表示されていることがあり
ます。これらの文字は リソース コンパイラには渡されません。OK ボタンを選択し
て再度ダイアログ ボックスをオープンすると、これらの文字はもう表示されません。
WndProc ブレークポイントの設定
Windows 関数の宣言部では、Breakpoints ダイアログ ボックスの WndProc ドロッ
プダウン リストに表示されるプロシージャに ANSI 形式を使う必要があります。ま
た、関数を含むソース ファイルのヘッダー ファイルには ANSI 形式の関数プロトタ
イプを宣言する必要があります。
ソース コード内で ANSI 標準に規定されている形式よりも前の形式で関数を宣言
している場合は、コンパイラはデバッガ用のタイプ情報を生成しません。
ANSI 以前 (古いスタイル) の宣言は次のような形式です。
LRESULT FAR PASCAL MyWndProc ( hWnd, wMsg, wParam, lParam )
HWND hwnd ;
WORD wMsg ;
WORD wParam ;
LONG lParam ;
{
...
}
同じ関数を ANSI 形式で宣言すると次のようになります。
LRESULT FAR PASCAL MyWndProc ( HWND hwnd, WORD wMsg, ・
WORD wParam, LONG lParam )
{
...
}
C++ コード上の配列要素の拡張表示の障害
C++ のソースコード上で、ある関数の引数として配列を渡してその関数の中でそ
の配列を調べようとすると CodeView や Visual WorkBench のデバッガは不正な配列
要素の値を表示します。
この障害は C++ のコードをコンパイルしたときにだけ起こります。ただし、デバ
ッグ時の配列変数の表示は不正であっても、コンパイラは実際には正しくコードを生
成しており、期待通りの動作をします。以下にそのサンプルコードを示します。
/* コンパイルオプションには/Zi が必要
*/
#include <stdio.h>
void Function( int Array[5] )
{
int i;
printf("・nInside Function: ・n");
for( i = 0; i < 5; i++ )
printf("Array[%d] = %d・n", i, Array[i]);
for( i = 0; i < 5; i++ )
Array[i] = i;
}
void main( void )
{
int Array[] = { 4, 3, 2, 1, 0 };
int i;
printf("Before calling Function: ・n");
for( i = 0; i < 5; i++ )
printf("Array[%d] = %d・n", i, Array[i]);
Function( Array );
printf("・nAfter calling Function: ・n");
for( i = 0; i < 5; i++ )
printf("Array[%d] = %d・n", i, Array[i]);
}
サンプルコードを CodeView または Visual Workbench のデバッガでデバッグすると
き、Function() という関数内のトレース中に Array という名前の配列変数に Watch
を設定すると、配列の値は以下のように表示されます:
Array[0] = 3052
Array[1] = 3052
Array[2] = 822
Array[3] = 4
Array[4] = 3
実際に表示されるArray[0]、Array[1]、Array[2]の値はこれらと異なる場合がありま
すが、いずれにしても正しい値にはなりません。
このとき Array のアドレスをみると、デバッガがスタック上の間違った場所を参
照していることがわかります。このようにデバッガ内の配列変数の表示は正しくあり
ませんが、サンプルコードの実行時の実際の出力は正しく行われます。
SYSTEM.INI ファイルにおける WinExclusive フラグの設定
SYSTEM.INI ファイルの [386Enh] セクションの WinExclusive フラグの値を 1 に
設定しないでください。このフラグを 1 に設定すると、Visual Workbench 上でビル
ドを実行したときに内部エラーが発生し、WINTEE.EXE の実行待ちで Visual
Workbench がタイム アウトを生じたことを示すメッセージが表示されます。
ペン コンピュータ上での Visual Workbench の利用
Visual Workbench のリソースをペン コンピュータ上でコンパイル、リンク、バイ
ンドする場合、ペンが使えなくなることがあります。この場合は、Visual Workbench
を終了するとペンが再び使えるようになります。
第 3 章 App Studio
App Studio のグラフィックス エディタとディスプレイ ドライバ
800 × 600 以上の解像度または 16 色以上をサポートするディスプレイ ハードウ
ェア上で App Studio のグラフィック エディタを実行した場合、その動作が不安定に
なることがあります。これはたいていの場合ハードウェア メーカーが提供するディ
スプレイ ドライバにその原因があります。
ドライバのバグが存在することを示す兆候には、次のようなものがあります。
■ 奇数の幅の画像の右端のピクセルが黒に設定される
■ アイコンの編集中に一般保護違反が発生する (この後の "ディスプレイ性能の
改善" を参照してください)
■ Visual Workbench でデバッグ中にドライバ ファイル内で INT 3 が実行される
■ モノクロ画像でブラシを使っているときに余分なピクセルまで描画される
■ 1 ピクセル幅の対角線の表示が太すぎる
■ モノクロ画像をカラー画像に変更すると画像が破壊される
■ フィル ツールで正しく塗りつぶせない。
App Studio のグラフィック エディタを使用中にこれらの問題が生じ、しかも
Windows を高解像度か 16 色以上で実行している場合は、問題の原因がディスプレイ
ドライバにないかどうか最初に確認する必要があります。原因がディスプレイ ドラ
イバにある場合は、ハードウェア メーカーから最新版のドライバを入手してくださ
い。
問題の原因がディスプレイ ドライバにあるかどうかを調べるには、次に示す手順
に従って Microsoft の標準ディスプレイ ドライバのいずれかをインストールしてみて
ください。
1. Windows のセットアップ プログラムを実行します (Visual C++ のセットアッ
プ プログラムではありません)。
2. [ディスプレイ] ドロップダウン ボックスから VGA (NEC 版の場合は、
640X400、16 色モード) を設定して OK を選択し、新しいドライバのインス
トール手順に従って操作します。
新しいドライバを設定して Windows を再起動し、App Studio を実行して同じ問題が
再発するかどうか確認してください。これで問題が起きないときは、ディスプレイ
ドライバが問題の原因です。
Windows の標準ディスプレイ ドライバだけを使いつづけている限りは問題の発生
を防止できますが、ディスプレイ ハードウェアが提供する高解像度や色数などの性
能を引き出すためにはバグを修正した新しいディスプレイ ドライバを入手する必要
があります。最新版のディスプレイ ドライバを入手する方法としては、直接ハード
ウェア メーカーに問い合わせるのが最もよいでしょう。
App Studio で問題を発生することが明らかになっているドライバの一覧を次に示し
ます。
App Studio で問題を生じることが確認されているドライバ
ATI Ultra および ATI Ultra Pro。Gateway 2000 をはじめとする各種のコンピュータ
に添付された ATI ドライバにも、Visual C++ 1.0 の出荷時点でディスプレイ ドライ
バのバグが何ヶ所か報告されています。ATI ではこれらのバグについて現在処置を行
っており、最新のドライバでは解決されている可能性があります。
ディスプレイ性能の改善
App Studio では、800 × 600 以上の解像度または 16 色以上を表示するディスプ
レイ ハードウェアに共通して発生する可能性が高いいくつかのバグに対処するため
に、それらの対処機能が組み込まれています。Visual C++ 1.0 が出荷された時点では
市販のディスプレイ ハードウェアでは StretchBlt グラフィックス関数が正しくイン
プリメントされていないことが多かったため、その障害を回避する機能が追加されま
した。App Studio のこの障害回避機能を使うと、使わない場合に比べてグラフィック
ス エディタの再描画速度が遅くなります。このためこの機能を必要としないディス
プレイ ドライバを使っている場合は、App Studio グラフィックス エディタの再描画
速度を改善することができます。
グラフィックス エディタの描画速度を改善するには、次の行を APSTUDIO.INI フ
ァイルの [Graphics Editor] セクションに追加してください。
[Graphics Editor]
DriverCanStretch=1
この変更が正しく行われたかどうか確認するには、App Studio を実行して新しいビ
ットマップを作成してください。ビットマップの作成と描画が正常に行われるときは、
ディスプレイ ドライバには StretchBlt が原因となる問題は生じません。この場合は、
新しい行を .INI ファイルに記述したことによってグラフィックス エディタの性能が
改善されています。
新しいビットマップを作成したときに App Studio が正常に動作しないときは、ド
ライバには StretchBlt を原因とする問題が生じています。この場合は
DriverCanStretch の行を .INI ファイルから削除して、ハードウェア メーカーの提供
している最新バージョンのディスプレイ ドライバをインストールして下さい。
コンボ ボックスのドロップダウンのサイズ変更
App Studio ダイアログ エディタのコンボ ボックス ドロップダウンの初期サイズ
を変更するには、通常はそのコントロールのドロップダウン 矢印をクリックします。
これによってコンボ ボックスのドロップダウン部分が表示され、コントロールの一
番下にはサイジング ハンドルが表示されます。コンボ ボックスの高さが 0 などの
場合には、サイジング ハンドルの外観は変更しない場合があります。
その場合でも、垂直方向にはコンボ ボックスのサイズを変更できます。下方向矢
印をクリックしてマウス カーソルを一番下のサイジング ハンドル上に移動してくだ
さい。マウス カーソルの形は上下方向矢印に変わり、通常の方法でコンボ ボックス
を垂直方向にサイズ変更できます。コンボ ボックス ドロップダウンのサイズ変更に
ついて詳しくは Books Online の『App Studio User's Guide』を参照してください。
第 4 章 SDK, MFC, OLE, CDK サンプル ファイル
サンプルプログラムの日本語対応
SDK 以外の MFC、OLE、 CDK のサンプルプログラムは 2 バイト文字に対応し
ておりません。
2 つのプロジェクト ファイルを持つ SDK サンプル ファイル
Visual C++ の一部の SDK サンプル ファイルにはプロジェクト ファイル (.MAK)
を 2 つ持っているものがあります。これらはそれぞれ .EXE ファイル用と .DLL 用
です。この場合、必ず先に .DLL プロジェクトをビルドする必要がありますが、これ
は .DLL プロジェクトによって生成されるライブラリ ファイルはすべて .EXE プロ
ジェクトによってリンクされる可能性があるためです。
RAINBOW サンプル ファイル
SDK Samples Reference Help (SAMPLES.HLP) に記述されている SDK のサンプル
ファイル RAINBOW は Visual C++ には含まれていません。
MIDIMON サンプル ファイル
MIDIMON サンプルをビルドすると、リソース コンパイラから RW4002 の警告が
発生しますが、ビルドは正常に行われています。この警告メッセージを無視して下さ
い。
第 5 章 CL コンパイラ
/Fs コンパイラ オプションの利用
(ソース リストを作成する) /Fs オプションを指定してコンパイルすると、TEMP 環
境変数で指定したディレクトリに 2 つの一時的なファイルが作成されます。コンパ
イル中にエラーが発生しなければ、これらのファイルは空のままです。コンパイル終
了後、これらのファイルは削除することができます。
ファイルが多すぎるために生じるコマンド ライン オーバーフロー
プロジェクトに含まれるファイル数がほぼ 110 個を超えるとコンパイラは D2031
エラー (コマンドライン オプションが多すぎます) を発生します。コンパイラに送れ
るコマンドライン エントリは最大で 128 個までですが、そのうちのいくつかはコマ
ンドライン オプションに取られるため、その残りがコンパイラの処理するソース フ
ァイル名ということになります。Visual Workbench はプロジェクト内のすべてのファ
イルを 1 個のバッチに送ります。
/Tc または /Tp オプションを使う場合は、ファイルの最大数は約 55 個まで減りま
すが、これは指定したオプションがすべてのファイル名に付加されるためです。
この問題は、プロジェクトをオープンしたときに [Use as an External Makefile]チェ
ック ボックスをチェックしておくことによって回避できます。この場合、Visual C++
は内部メイクファイルを外部メイクファイルとして取り扱い、Microsoft NMAKE はコ
ンパイル対象の各ファイルごとにコンパイラをくり返し呼び出します。
数式の評価と評価順序点
数式は、すべての副作用が解決できる点 (評価順序点) においてのみ評価されます。
この ANSI の基準に従っている限り、コンパイラがどのようにプログラムを最適化し
てもコンパイラによって最適化されたプログラムともとのプログラムの評価順序点は
一致しているはずです。一方、高速、最適化、p-code の各コンパイルにおいてはプロ
グラムの最適化レベルが異なるため、評価順序点を含まない数式の評価においては同
じ値を返すという保証がありません。例えば、次に示す式は評価順序点が無いため、
"x" と "y" の内容を入れ替えるという保証はありません。
x^=y^=x^=y;
/Z7 オプションの利用
Microsoft C/C++ Version 7.0 のデバッグ情報を生成するオプション (/Z7) を設定す
ると、コンパイラはデバッグ情報の一部をプログラム データベース (.PDB) ファイル
内に生成するかわりに、すべてのデバッグ情報を実行ファイル内に生成します。ただ
し、このオプションを設定しても、実行可能ファイルは C/C++ version 7.0 で使われて
いる CodeView 4.0 デバッグ情報と互換性のあるファイル形式にはなりません。
/Zr オプションの利用
Windows 用のプログラムのヌルまたは範囲外のポインタをチェックするのに /Zr
オプションを使うことはできません。Windows のメモリ管理手法では、/Zr によって
検出される状態をチェックしています。このため、Windows 用のプログラムで /Zr
を使うリンカがエラーを返します。[C/C++ Compiler Options] ダイアログ ボックスで
は、すべての Windows プロジェクト タイプにおいて[Code Generation]カテゴリの
[Check Pointers] チェック ボックスは無効になります。
DLL と /Gy (参照されないコードの無視) および /O1 (スモール コード設定)
の各オプションの関係
Windows コールバック関数を含む DLL をビルドする場合は /O1 オプションを設
定できません。/O1 オプションは参照されない関数を実行可能ファイルから取り除く
/Gy オプションを使いますが、/Gy オプションは DLL 内にある Windows コールバ
ック関数まで取り除いてしまうからです。対策としては、DLL をビルドするときにリ
ンカの /NOPACKF オプションを設定してください。
関数をインラインでコンパイルする場合の評価基準
次に示す場合は、インラインで定義された関数でもインライン関数としてコンパイ
ルされません。
1. 関数が大きすぎる場合
コンパイラはインラインの量が増えすぎないようにスレッショルドを決めています。
関数の大きさがこのスレッショルドを超えると、インライン展開されません。つま
り、インライン展開する関数と、その関数がインライン展開されるためにインライ
ン展開される他の関数を合わせた値がスレショルドの値を超えると、展開は行われ
ません。例えば関数 A が関数 B を呼び出して A がインライン展開されるとき、
B をインライン展開することによってスレッショルドを超える場合は B はインラ
イン展開されませんが A はインライン展開されます。スレッショルドの調整は
/OV オプションによって行います。
2. 関数が展開可能な最大の深さを超える場合
いったん展開可能な最大深さを超えると、すべてのインライン展開は抑圧されます。
これを制御するには inline_depth と inline_recursion の各プラグマを使います。
3. 呼び出し側と呼び出される側が互換性のないオプションを設定している場合
プラグマと最適化スイッチの組み合わせによっては互換性がそこなわれる場合があ
ります。
4. 関数のプロトタイプ宣言と矛盾している場合
プロトタイプ宣言におけるパラメータの個数と実際に指定されたパラメータの個数
が異なります。
5. 関数ステートメントの評価順序が決められている場合
評価の順番が決められているステートメントにおいて評価順序を変更しないとイン
ライン展開ができない場合は、関数はインライン展開されません。
6. 十分なメモリ容量がない場合
コンパイラが関数をインライン展開するのに必要なメモリ容量を確保できない場
合があります。これは通常、高速コンパイル オプション (/f) を選択するかまたは
関数が p-code としてコンパイルされるかしたときに、展開が循環的に行われる場
合 (A をインライン展開すると B も展開され、さらに C も展開されるというよ
うな場合) のみ発生します。
「C2371 'HSZ' がすでに宣言されています」のエラーが発生する
AppWizard で生成したソースコードに ddeml.h をインクルードするように記述して
コンパイルすると「error C2371: 'HSZ' : すでに宣言されています。」というエラーが
発生します。これは AppWizard で生成されたコードに標準でインクルードされてい
る afxext.h と ddeml.h の両方のヘッダファイルの中で、前者は
DECLARE_HANDLE32 マクロで、後者は typedef BPSTR FAR* で HSZ という型が
宣言されているために発生します。この問題は以下の方法で回避することができます。
1. AFXEXT.H と DDEML.H を同一モジュール内でインクルードしないようにコー
ドを記述する。
2. VBXを使用しないのであれば AFXEXT.H のインクルードの記述の前に
NO_VBX_SUPPORT を define する。
3. どちらかのヘッダを書き換えて HSZ 型の宣言を1つにする。
第 6 章 CodeView
Windows NT上でのCodeView for Windowsの実行
CodeView for WindowsはWindows NT上での動作は保証しておりません。実行した場
合予測できない障害が発生する場合があります。Windows NT 上でのデバッグには
Visual Workbench のデバッグ機能をご利用ください。
MS-DOS シェルからの 32 ビット MS-DOS 拡張ツールの実行
CodeView の MS-DOS シェルからは 32 ビット対応の MS-DOS 拡張ツールは実行
できません。
2 つのデバッガの同時実行
2 つ以上のデバッガを同時に実行することはできません。たとえば CVW 上でアプ
リケーションを実行中に CodeView for MS-DOS や Visual Workbench デバッガを起動
することはできません。
Windows 終了プロシージャへのブレークポイントの設定
Windows 終了プロシージャ (WEP) にはブレークポイントを設定できません。設定
した場合はシステムの動作が不安定になります。
DPMI 上で実行中の CodeView for MS-DOS による INT 2 のステップ オー
バー
(Windows の MS-DOS ボックスのような) DPMI サーバー上で実行中の CodeView
for MS-DOS を使って INT 2 (Non-Maskable Interrupt) をステップ オーバーした場合、
実行中に命令ポインタ (IP) が各マシン語命令の先頭を正しく指せないために、予測
できない障害が発生する場合があります。
複数のモジュールを同じ名前でオープンする
同一の実行可能ファイル (.exe) 内の 2 個以上のモジュールが同一のファイル名と
拡張子を持つ場合は、各モジュールはばらばらにロードする前に異なるパスでコンパ
イルされる必要があります。例えば TEST.C という同名のモジュールは、次のように
しても区別されません。
cl /Od /Zi test.c
cd testdir
cl /Od /Zi test.c ..\test.obj
これを区別するには、次のように記述する必要があります。
cl /Od /Zi test.c testdir\test.c
CVW における Dr. Watson の利用
Dr. Watson (DRWATSON.EXE) は、デバッグ対象のアプリケーションの実行中に発
生した例外を CVW に渡します。ただし、フォールトの原因となった命令をステップ
実行しているときに発生した例外については、CVW に渡しません。例外を発生した
命令をステップ実行する代わりに、Go コマンド (F5) を実行してください。Dr.
Watson は例外をトラップしてこれを CVW に渡します。
各社のビデオ カードの利用 (NECマシンの場合)
ビデオ カードに、カノープス(株)製の Power Window、(株)アイ・オー・データ機
器製の GA-1024A および GA-1280A、(株)メルコ製のWAB-Sを使っている場合、以下
のドライバ プログラムを Windows の起動の前に実行しておく必要があります。
カノープス powerwin.exe
cvwpw.exe (928II, 928G, 801G, 928, 801 用)
I/O データ ga1024a.exe
メルコ wabs.exe
cvwwab.exe (WAB-S, WAB-1000, WAB-2000, WSR-E 用)
なお、I/O データ製のビデオカードの場合、gawin.bat というバッチ ファイルから
Windows を起動していますが、このファイルを編集して、gainit という初期化プログ
ラムの次に ga1024a.exe を起動するようにして下さい。また、ga1024a.exe で GA-
1024A および GA-1280A をサポートしています。
これらのドライバ をインストールせずに Windows を起動した場合、シングルモニタ
では,CVW の画面が表示されません。また、ツーモニターでは,/2 を指定しても正
常に機能しません。
S3 ベースのビデオ カードの利用 (DOSV マシンの場合)
S3 チップ セットを使ったビデオ カード (Orchid Fahrenheit 1280 など) を装備した
コンピュータ上で実行していた CodeView を終了した後は、カーソルの色が変化して
いることがあります。これはハードウェアの互換性がないのが原因で、正しい色に戻
すには MS-DOS のコマンド MODE co80 を使います。
CVW での I コマンド
Visual C++ 1.5 に添付されている CodeView for Windows では、コマンド ウィンドウ
で I コマンドを実行しても全く機能しません。また、他に与える影響もありません。
これは、Windows では基本的に直接ポートへアクセスすることが出来ないことが原因
です。このため CodeView for Windows 上から I コマンドは使用出来なくなっていま
す。
CodeView for MS-DOS でのマウスの使用
CodeView for MS-DOSでマウスを使用するためにはあらかじめ MOUSE.COM を常
駐しておく必要があります。
NECマシンのWindows 3.1 上でご利用の場合は、MOUSE.COM バージョン 7.x を
お使いください。
第 7 章 Microsoft Foundation Class ライブラリ
CDocTemplate::SetServerInfo
Class Library Reference では、pOleViewClass パラメータは埋め込み先編集のために
使用されると説明していますが、正しくありません。このパラメータには、呼び出さ
れたときに NULL を設定しなければならず、デフォルト値は NULL です。
Watcom ODBC ドライバ
英語版のWatcom の ODBC driver for Watcom SQL Version 3.1 は、
SQL_SO_KEYSET をサポートしています。SQL_SO_KEYSET は、Microsoft
Foundation Classes データベース クラスがダイナセット サポートするために必要です。
しかし、ドライバは SQL_SO_KEYSET をサポートしていないという正しくない通知
を行います。このドライバのユーザーは、Watcom に連絡してドライバをアップグレ
ードする必要があります。
ツールバーを使うアプリケーションのデバッグ
ビデオ ドライバによっては、開発中のデバッグ用に挿入された INT 3 命令を製品
版でも削除せずにそのまま残しているものがあります。デバッガが実行中でないとき
はこれらの INT 3 命令は無視されますが、(Visual Workbench の統合デバッガおよび
CodeView for Windows などの) デバッガの実行中に INT 3 命令がブレークポイント
として割り込みを行うと、プログラムの実行が中断されます。同様に、INT 3 命令は
MS-Test アプリケーションの実行に影響することがありますが、これはこのアプリケ
ーションが INT 3 命令を 一般保護違反と解釈するためです。
Microsoft Foundation Class ライブラリが提供するツールバーの描画コードは、一部
のビデオ ドライバに対して INT 3 命令を実行される効果があります。Microsoft
Foundation Class ライブラリを使ったプログラムのデバッグ中にこの問題が生じた場
合は、割り込みを無視してプログラムの実行を継続するか、またはデバッガ内で INT
3 を NOP 命令に書き換えて実行を継続してください。
MFC 1.0 から MFC 2.0/2.5 への変換
MFC 1.0 のアプリケーションを MFC 2.0/2.5 用に再コンパイルする場合は、メイク
ファイルとソース ファイルを修正する必要があるかもしれません。これらの変更箇
所については、Microsoft Visual C++ プログラム グループ内の MFC Tech Notes のア
イコンをダブルクリックしてMFCNOTES.HLP を開き、テクニカルノートの 19 を参
照してください。
DLL の WEP を Foundation Class Library Version 2.5 に移植する
Microsoft Foundation Class ライブラリのバージョン 2.5 では WinApp から派生さ
せたクラスの ExitInstance メンバ関数は Microsoft Foundation Class ライブラリが提供
する _WEP 関数によって呼び出されます (Windows が DLL の WEP を呼び出すと
きは逆に C++ ランタイム ライブラリによって呼び出されます)。Microsoft Foundation
Class ライブラリのバージョン 1.0 を使って DLL をインプリメントしたときは、明
示的に _WEP 関数をインプリメントする必要があります。DLL をバージョン 1.0 か
らバージョン 2.5 に移植するには、コードを古い _WEP 関数から
CWinApp::ExitInstance 関数のオーバーライドに移動して古い _WEP 関数を取り除い
てください。
VBX カスタム コントロールの利用
Visual Basic version 1.0 の VBX カスタム コントロールの多くは App Studio およ
び MFC 2.5 でも動作することをテストにより確認していますが、現在使用中の VBX
コントロールがこのグループに入るという保証はありませんし、とくにあまり普及し
ていない VBX コントロールの場合は問題の生じる可能性があります。
重要 次に示す兆候のどれかがあらわれたときは、VBX コントロールの開発元に、
App Studio と MFC 2.5 用にテストの完了した改定版のコントロールが利用できるか
どうかを問い合わせてください。Microsoft も現在 VBX コントロールの開発元と協
力して、VBX コントロールが App Studio および MFC 2.5 上で動作するように作業
しています。
App Studio および MFC 2.5 で動作しないコントロールには次に示すような兆候が
あります。
■ 再描画で問題が生じる (描画しない、または描画が多すぎる)
■ プロパティの設定がコントロールに反映されない
■ コントロールがサイズ変更できない
■ コントロールがタブ オーダーやグループ化に正しく応答しない
■ コントロールがテスト モードで機能しない
■ コントロールがフォームからロードされることを前提に作成されているため
に、プログラムから作成されたときに正しく初期化されない。
■ 修復不能のアプリケーション エラーが発生する
■ 一般的な保護違反が生じる
■ デバッグ カーネル Fatal Exit が発生する
VBX コントロールを含むダイアログ ボックスとフォームのビューのデバッグ
Visual Workbench デバッガの利用中に直接または間接で VBX コントロールを生成す
る関数にブレークポイントを設定すると、"The program is stopped in the debugger"(プロ
グラムはデバッガ内で停止しました) というメッセージが表示されることがあります。
この場合は、デバッガのフォーカスがソース コード上のブレークポイントに移動す
る前にメッセージ ボックスで OK を選択してください。その箇所からデバッグを継
続できます。
このメッセージ ボックスは、Visual Workbench デバッガのソフト モードにおいて
のみ表示されます。Visual Workbench デバッガのハード モードまたは CodeView for
Windows においては表示されません。
スモールおよびコンパクト モデルの MFC アプリケーションではデバッグ バ
ージョンがサポートされません
デバッグ用の MFC アプリケーションは、スモールまたはコンパクト モデルではビ
ルドできません。これは、簡単な MFC アプリケーションにおいてさえデバッグ用に
追加されるコードがスモール モデルおよびコンパクト モデルの限界である 64KB を
超えるためです。リリース用のスモールまたはコンパクト モデルのアプリケーショ
ンについてはスモールまたはコンパクト モデル ライブラリを使えばビルドできます。
スモールまたはコンパクト モデルの MFC アプリケーションを作成したいときは、
デバッグ用のビルドではそれぞれミディアムまたはラージ モデルを使い、最終的な
リリースのときにスモールまたはコンパクト モデルを使ってビルドしてください。
CHKBOOK サンプル プログラムに対する ClassWizard の利用
CCheckView クラスには OnEditCommitCheck と OnAmountNumChange の 2 つの
メッセージ ハンドラがあります。ClassWizard でこのクラスを選択して Member
Functions リスト ボックスで OnEditCommitCheck を強調表示すると、Object IDs リス
ト ボックスにも Messages リスト ボックスにも何も強調表示されません。これは
CCheckView が CFormView から派生され、ClassWizard が CFormView からの派生
クラスをビュー クラスというよりもダイアログ クラスとして取り扱っているためで
あり、このため ClassWizard は関連するダイアログ テンプレートのコントロールと
それらのコントロールが生成する通知メッセージだけしかリスト アップしません (例
えば ClassWizard は OnAmountNumChange によってハンドルされる通知メッセージ
とそのメッセージを生成するコントロールの ID を強調表示します)。どのメッセージ
が OnEditCommitCheck によって強調表示されるかを確認するには、App Studio を使
って CHKBOOK.RC をオープンして IDR_CHECKFRAME メニュー リソースを編集
してください。これによって ClassWizard は CCheckView を調べるようになります。
ClassWizard と CFormView 派生クラスの関係については Books Online の『Class
Library Reference』の CFormView の項を参照してください。
Microsoft Foundation Class Version 2.5 DLL シンボル ファイル
これらのファイルはセットアップ時にインストールされませんが、CD-ROM に置
かれています。通常、これらのファイルは WDEB386 でデバッグするために使用しま
す。CodeView や統合的なデバッガでデバッグする場合は、これらのシンボル ファイ
ルは必要ありません。シンボル ファイルをインストールするには、ファイルを
\WINDOWS\SYSTEM ディレクトリに直接コピーしてください。
DLL シンボル ファイル CD-ROM のディレクトリ
MFC250.DLL MFC250.SYM \msvc15\redist
MFCD250.DLL MFCD250.SYM \msvc15\redist
MFCO250.DLL MFCO250.SYM \msvc15\redist
MFCOLEUI.DLL MFCOLEUI.SYM \msvc15\redist
MFC250D.DLL MFC250D.SYM \msvc15\debug
MFCD250D.DLL MFCD250D.SYM \msvc15\debug
MFCO250D.DLL MFCO250D.SYM \msvc15\debug
MFC OLE サーバーの埋め込み先編集での ESC キーの使用
OLE 2.0 の仕様では、サーバーもコンテナも埋め込み先編集を終了させるために
ESC キーを使用しなければならないと規定しています。AppWizard で作成した OLE
ビジュアル編集コンテナ アプリケーションは、この操作を行うためのアクセラレー
タ キーとハンドラを用意します。しかし、AppWizard で作成した OLE ビジュアル
編集サーバー アプリケーションは、この機能を自動的に用意しません。コンテナま
たはサーバーがオブジェクトを非アクティブにするために ESC キーを使わない場合、
ユーザーがサーバーを非アクティブにするには、インプレイス サーバー ウィンドウ
以外の場所をマウスでクリックする必要があります。AppWizard はサーバー アプリ
ケーションに ESC キー ハンドラを自動的に生成しないので、次のいずれかの方法で
実現してください。
1) インプレイス サーバーのアクセラレータ テーブルに VK_ESCAPE に対するア
クセラレータを追加します。このアクセラレータ テーブルの ID は、サーバーのイ
ンプレイス メニュー リソースと同じ ID でなければなりません。AppWizard が生成
するデフォルトの ID は、IDR_<<PROJNAME>>TYPE_SRVR_IP です。
2) ClassWizard を使って VK_ESCAPE アクセラレータに対するハンドラを追加しま
す。通常のアプリケーションでは、COleServerDoc 派生クラスのハンドラを実現しよ
うとします。ハンドラは、ドキュメントが埋め込み先でアクティブな場合のみ非アク
ティブにする必要があります。
void CMyServerDoc::OnCancelInplace()
{
if (IsInPlaceActive())
OnDeactivateUI();
}
英語版WATCOM SQL ドライバでの AppWizard と ClassWizard の利用
AppWizard または ClassWizard では、CRecordset 派生クラスと WATCOM SQL デ
ータ ソースの表の対応付けができないことがあります。AppWizard では、[Database
Options] ダイアログ ボックスで [WATCOM SQL data source] を選択した時に起こる
ことがあります。ClassWizard では、新しい CRecordset 派生クラスを追加し、[SQL
Data Sources] ダイアログ ボックスで [WATCOM SQL data source] を選択した時に起
こることがあります。
CDatabase::Open
CDatabase::Open は、dbcore.cpp の 343 行目で ::SQLSetConnectOption が
SQL_ODBC_CURSORS 呼び出しを使って ODBC のカーソル ライブラリをロードし
ます。カーソル ライブラリをロードすると、基になるドライバがスクロールをサポ
ートしなくても、スナップショットに対して SQL_SCROLL_STATIC スクロール オ
プションを指定できます。
ダイナセットのようなレコードセットを開くには、ドライバが
SQL_SCROLL_KEYSET をサポートしている必要があり、カーソル ライブラリを必
ずロードするのではなく、任意にロードするように変更しなければなりません。設定
を変更するには、::SQLSetConnectOption 呼び出しの引数を SQL_CUR_USE_ODBC か
ら SQL_CUR_USE_IF_NEEDED に変更します。引数を変更すると、基になるドライ
バが SQLExtendedFetch をサポートしている場合はカーソル ライブラリをロードしま
せん。スナップショットは、カーソル ライブラリがロードされているか、基になる
ドライバが SQL_SCROLL_STATIC をサポートしている必要があります。
CString クラスでの文字列の扱いについて
CString クラスでは、1 バイトを 1 文字としてカウントしています。
印刷プレビューについて
一部のプリンタ ドライバには、TrueType フォントなどの一部のフォントのキャラ
クタの幅を正確に返さないものがあります。これを補うため、Microsoft Foudation
Class ライブラリでは実際のキャラクタの幅ではなく、キャラクタの幅の平均値を使
って計算しています。このため、印刷プレビュー画面では、実際に印刷されるときよ
りも行が長く表示され、画面の右端が欠けてしまう場合があります。
ドキュメントを実際に印刷する場合は、正しく印刷されます。
GRID.VBX について
GRID.VBX は VBCHART サンプルで使用する VBX コントロールです。通常、
VBX ファイルは Windows のシステム ディレクトリにインストールされますが、
Visual C++ では、新しいバージョンの GRID.VBX の上書きを避けるため、
\MFC\SAMPLES\VBCHART ディレクトリにインストールしています。VBCHART
サンプルはデフォルトのディレクトリ構成で実行可能ですが、新たに GRID.VBX を
使ったアプリケーションを開発し、それを実行する場合は、このファイルを Windows
のシステム ディレクトリにコピーして下さい。
GRID コントロールでのスクロールバーの動作について
Visual C++でMFCのVBCHARTサンプル の GRID コントロールをアプリケーションで
使用し実行した際に, GRIDコントロール内の任意の場所をクリックし, スクロールバ
ーの上下矢印をクリックすると一部分しかスクロールしません. この GRID.VBX の
問題を回避するには GRID コントロールをサブクラス化しスクロールイベントに対す
る処理をマニュアルで行う必要があります。Microsoft Developer Network CD と US
のダウンロードサービスにこの手続きを行うサンプルがあります。
1. MSDN Vol.9 "Sample City" - "C++ Sample" - "GRIDFIX"
2. Download service
- CompuServe
GO MSL
Search for GRIDFIX.EXE
Display results and download
- Microsoft Download Service (MSDL)
Dial (206) 936-6735 to connect to MSDL
Download GRIDFIX.EXE
- Internet (anonymous FTP)
ftp ftp.microsoft.com
Change to the ・softlib・mslfiles directory
Get GRIDFIX.EXE
リンカオプション /FARCALL の使用について
MFCを静的にリンクしたプログラムのデバッグ版のビルドに、リンカオプション
/FARCALL を指定、またはLink Optionsダイアログボックスの[Memory Image
Category]の[Translate Far Calls] をオンにした場合、リンク実行時にビルドエラー
(ERROR L4088)が発生する場合があります。そのときは リンカオプションから
/FARCALLをはずすか、[Translate Far Calls] をオフにしてください。
MFC ライブラリメモリモデル について
MFC 2.5 のライブラリは、インストールの際に選択することができます。
第 8 章 プロファイラ
Windows 終了プロシージャ (WEP) のプロファイル
WEP が呼び出されているときはプロファイラは使えません。プロファイラは通常、
WEP が呼び出されそうになるとこれを検出して、すべてのブレークポイントを .DLL
から削除します。
このため、PLIST からの出力に WEP へのエントリが含まれていても、WEP のプ
ロファイルは取得できません。さらに、WEP 以外の箇所で正常に行われた関数呼び
出しであっても、それが WEP 内で行われる場合はプロファイルを取得できません。
DLL が LoadLibrary() によってロードされるような状況では、プロファイラは
WEP が呼び出されそうになっていることを検出できない場合があります。この場合、
プロファイリング中かその後でおそらくシステムが暴走することになります。この場
合、すべての WEP とそれが呼び出す関数についてプロファイリングを明示的にオフ
にする必要があります。具体的には PREP への入力として .PCF ファイルを使
い、.PCF ファイルに WEP を含む各 .DLL の行を含めておく必要があります。
PROGRAM XXX.DLL
OBJECT YYY.DLL
FUNCTION WEP DELETE
ここで XXX と YYY のところには適当なファイル名が入ります。
第 9 章 C ランタイム ライブラリ
コマンドライン引数として使われる文字セット
Windows のアプリケーションと QuickWin アプリケーションでは、異なるコマン
ドライン引数に対して異なる文字セットを使います。すなわち、最初の引数である
argv[0] を渡すときは OEM 文字セットが使われ、それに続く文字列を渡すときは
ANSI 文字セットが使われます。
_BIOS関連関数について
Visual C++ version 1.0 日本語版以降、_bios 関連関数はサポートされておりません
が、過去のC言語製品との互換性維持のため、_biosライブラリは存在します。使用法
については、旧バージョンのヘルプおよび、リファレンスマニュアルを参照してくだ
さい。
Microsoft C 6.0以前の日本語処理関数との互換性について
1. MBASCII1.OBJ
Microsoft C/C++ Ver 7.0 よりも以前の Microsoft C でサポートされていた日本語処
理関数( jis 系関数など)との互換性を保つために MBASCII1.OBJ が用意されています。
これらの古いライブラリ関数を使用する場合には mbstring.h、mbctype.h のかわりに
jstring.h、jctype.h をインクルードし、リンク時に MBASCII1.OBJ をリンクしてくだ
さい。
2. JOLDNAME.LIB
Microsoft C/C++ Ver 7.0 よりも以前の Microsoft C との互換性を保つために、
JOLDNAME.LIB というライブラリが用意されています。このライブラリには、従来
の名前(例えば jstrcmp )を新しい名前( _mbstrcmp )に対応させるエイリアスが含まれて
います。日本語処理関数を含む Microsoft C/C++ Ver 7.0 よりも前の Microsoft C で作
成したオブジェクトやライブラリと「本製品」で作成したプログラムを使って実行フ
ァイルを作成するときには JOLDNAME.LIB をリンク時に指定してください。
第 10 章 Books Online
NECマシンをお使いの場合
Books Online に含まれている情報は全て英語版です。したがって、ランタイムグラ
フィックス関数など、NEC マシンに特有の情報については他のオンラインヘルプ
(MSCXX.HLP など)を参照してください。
Detabase Classes の Chapter 3 Database Tutorial について
この Tutorial では Access の ODBC ドライバの使用が前提になっていますが、本
製品には Access の ODBC ドライバは含まれていないため、マニュアルの手順と全
く同じ作業を試してみることはできませんのでご注意ください。
ドライブ指定の変更
Visual C++ はインストール時、Books Online を CD-ROM ドライブからアクセスす
るように設定します。ネットワークを介して CD-ROM ドライブをアクセスしている
場合、またはハード ディスクから Books Online を実行する場合は、Books Online の
ファイルがあるドライブを指定する必要があります。ドライブは、Windows または
Windows NT をインストールしたルート ディレクトリにある CONTENTS.INI で指定
します。
ハード ディスクから Books Online を直接実行する場合は、ハード ディスクに約
60-80M の空き容量が必要です。ただし、次のような場合は、ハード ディスクを余分
に使っても Books Online をハード ディスクから直接実行してかまいません。
- アクセス時間の向上。ハードウェアの構成によって異なりますが、CD-ROM よ
りハード ディスクからの方が Books Online の実行は速くなります。
- CD-ROM ドライブの解放。Visual C++ 以外の CD-ROM ディスクを CD-ROM ド
ライブで使用できます。
Books Online をハード ディスクから実行する方法
1. 次のファイルを CD-ROM の \MSVC15\HELP サブディレクトリからハード デ
ィスクの任意のディレクトリにコピーします。
VCBKS15.HDX
VCBKS15.HLP
VCBKS15.IND
VCSDK15.HLP
2. CONTENTS.INI ファイルの [VCBKS15] セクションの "Path=" ステートメント
を編集して、1. でファイルをコピーしたディレクトリを指定します。次の例のように、
ディレクトリ名の最後に'\'を必ず指定してください。
[VCBKS15]
Path=C:\MSVC\HELP\
3. CONTENTS.INI ファイルの [VCSDK15] セクションの "Path=" ステートメント
を編集して、1. でファイルをコピーしたディレクトリを指定します。次の例のように、
ディレクトリ名の最後に '\' を必ず指定してください。
[VCSDK15]
Path=C:\MSVC\HELP\
4. CONTENTS.INI ファイルを保存して、Books Online を実行してください。
ネットワークを介した CD-ROM ドライブから Books Online を実行するには、
CONTENTS.INI ファイルの "Path=" ステートメントを編集して、ネットワーク ドラ
イブのファイルをアクセスできるように指定してください。
DBWIN と Books Online の同時利用
Windows 3.1 のデバッグ版で DBWIN アプリケーションを実行していると、Visual
C++ Books Online のビューア アプリケーションがアクセス違反を起こすことがあり
ます。このエラーは、次の状況で発生します。
1. Windows 3.1 のデバッグ版上で Books Online アプリケーションを実行したとき。
2. DBWIN アプリケーションを起動したとき。
3. DBWIN アプリケーションの [オプション] メニューから [設定] を選択したとき。
4. [バッファを埋める] チェック ボックスをクリックして [] オプションを有効にし、
<OK> ボタンを選択したとき。
この問題を回避するために、DBWIN の [バッファを埋める] オプションは無効に
してください。
第 11 章 その他の注意点
Windows 3.1 のディスプレイを 32,000 色以上のフルカラーでご利用の場合
にセットアップを行うときの注意
Windows 3.1 のプログラムマネージャのリソース管理の仕様のために、上記の場合
ひとつのグループに登録できるアイコンの数が大幅に制限されます。そのため
VC++1.5のセットアップが、プログラムマネージャに新たに作成したグループにひと
つずつアイコンを登録する際に、エラーとなる場合があります。
そのときは、Windows のディスプレイの色数を 256 色に落とすなどしてセットア
ップを行い、その後でいくつかのアイコンを他のグループに移してからディスプレイ
の色数を元にもどし、移動させたアイコンを可能な数だけひとつずつ元のグループに
もどしてご利用ください。
これはWindows 3.1 だけの問題で、Windows NT 3.5ではこのような現象は起きませ
ん。
DEF ファイル内の STUB エントリを NONE にしない
DEF ファイル内の STUB エントリを NONE にしてはいけません。STUB NONE
の状態でビルドしたアプリケーションは MS-DOS プロンプトから実行したときにシ
ステムをロックして Windows 上でロードできなくなります。
ファイルのベース名を重複させない
プロジェクト内の各ファイルのベース名は重複してはいけません。例えば同一プロ
ジェクト内に MYAPP.C と MYAPP.CPP の 2 つのファイルが存在する場合、各ソー
ス ファイルについて MYAPP.SBR ファイルを生成するときに名前の衝突が生じます。
ネットワークとの互換性
Visual C++ の実行には、80386 プロセッサをサポートするネットワーク バージョ
ンが必要です。80286 以前のプロセッサしかサポートしないネットワークでは実行で
きません。
オンライン ヘルプの表示について
640 X 480 以下の解像度のコンピュータで Visual C++ のオンライン ヘルプ シス
テムをお使いになるときは、12 ドットのシステム フォントをお使いになることをお
勧めします。
一部のオンライン ヘルプのトピックは情報量が多く、これらのシステムで 16 ド
ット以上のシステム フォントをお使いの場合、すべてのトピックを表示しきれない
場合があります。
MOVE (Microsoft Overlay Virtual Environment) について
MOVE は、グラフィックス ライブラリおよび p-code を使ったアプリケーション
に対応していません。
Windows ディレクトリについて
Windows がルートディレクトリにインストールされている場合、Visual WorkBench
は、エラーメッセージ : "Cannot open the SYSTEM.INI file to test for the presence of the
MMD.386 driver. Subsequent builds may fail." を表示して終了します。
環境変数について
環境変数として、G, GO, GOT, GOTN, GOTNT, T, TN, あるいはTNTが使われている
場合、次に示すエラーでコンパイラなどの32 ビット MS-DOS 対応の拡張プログラム
が終了します。
DOSXNT : fatal error DX1350: cannot load program
DOSXNT : fatal error DX1270: command line error
DOSXNT : fatal error DX1270: command line error
フォントファイルについて
この製品に含まれているフォントファイル(HELVB.FON、MODERN.FON、
ROMAN.FON、SCRIPT.FON) の著作権は、米国 Bitstream 社に帰属します。
これらのフォントファイルを利用したアプリケーションを販売する場合は、米国
Bitstream 社の許可が必要です。
MAPSYM.EXE について
セットアップ プログラムがインストールする MAPSYM.EXE (デフォルトのディレ
クトリは \MSVC\BIN) は、ダブルバイトのファイル名をサポートしていません。も
しダブルバイトのファイル名を持ったファイルを処理したいときは、インストール
CD-ROM の \MSVC15\BIN\MAPSYMJ.EXE のファイル名を MAPSYM.EXEに変更し
て、元の MAPSYM.EXE の代わりにお使いください。ただし、この MAPSYMJ.EXE
につきましては Windows NT 3.1 及び 3.5 での動作を保証しておりません。
CTL3DV2.DLL について
VC++ のセットアップ開始時に Microsoft Office Manager など 3D ウィンドウが表
示されるアプリケーションが実行されていると、セットアップの途中で、
"...\CTL3DV2.DLL は現在使われているので、削除や変更はできません。すべてのア
プリケーションを終了し、<再試行>を選択してください。" というダイアログボック
スが表示されることがあります。VC++ のセットアップ開始前にあらかじめ終了させ
ておいてください。
PATCHDLL.BAT と FASTADD.OBJ について
Windows の DLL 内で、C のランタイム関数の sin()、cos()、sinl()、cosl() にpi/2 (2
分のパイ) の倍数に近い数値を渡して呼び出すと、不正な結果が返ってくることがあ
ります。Windows の DLL ランタイムライブラリが置かれているディレクトリ(初期
値では \MSVC\LIB) にある Patchdll.bat を実行すると、該当するランタイムライブ
ラリ内の fastadd.obj モジュールをこの問題が解決されたモジュールと入れ替えます。
CDKをインストールする場合
Visual C++ 1.5 をインストールする際に Custom installation を選び、OLE SDK ボタン
をクリックして Tools チェックボックスをX にしてください。
NTHOST.HLPに記述されている Windows Service Pack 1 について
Windows Service Pack 1 は、英語版 Windows NT 3.1 が対象です。日本語版の
Windows NT 3.5 をお使いの場合は必要ありません。
第 12 章 確認されているランタイムライブラリの不具合
_setwritemode(_GXOR)の時、円の描画が不正(NEC 版のみ)
描画モードをXOR, _ellipseの第一パラメータを_GBORDERにすると描画された円の
四隅が欠けます。円周を大きくすると、欠ける位置が変わり、欠ける場所も増えてき
ます。
・_setwritemode()の引数が _GXOR でない時、_setwritemode()自体がないときには
発生しません。
・_ellipse()の引数が _GBORDER でない時も発生しません。
例
==
#include <stdio.h>
#include <conio.h>
#include <graph.h>
void main(void)
{
int rtn;
_setvideomode( _MAXRESMODE );
_setcolor( 7 );
_setwritemode( _GXOR );
rtn = _ellipse( _GBORDER, 100, 100, 200, 200);
getch();
_setvideomode( _DEFAULTMODE );
}
64Kバイト以上の配列を使ったqsort関数の不具合
64Kバイト以上のある大きさを持つ二次元配列にたいしてqsort関数を実行した時に
結果の配列に空のデータが含まれることがあります。
原因
====
これはヒュージデータを使用したqsort関数の不具合です。ヒュージデータをqsort
関数で使用する場合は二次元配列を構造体配列に書き換えることによって回避するこ
とが出来ます。
例
==
// cl option needs /AH
#define ELM 32
#define TBL ((0xffff / ELM) + 1)
//char tbl_key[TBL][ELM];
struct table{char key[ELM];}tbl_key[TBL]; // <- Modified
int cmpf(const void *c1,const void *c2);
void main(void)
{
..
qsort(&tbl_key,TBL,ELM,cmpf);
}
int cmpf(const void *c1,const void *c2)
{
return strcmp((struct table*)c1, (struct table*)c2);// <- Modified
}
//EOF
_polygon関数の塗り潰しが正常に行われない(NEC 版のみ)
_polygon関数を使用してpolygonの角がビューポートの外に設定されている時
_polygonの塗り潰しが正常に行われません
_polygonが縦方向に1ドット足りない図形を描画する(NEC 版のみ)
_polygonの第一引き数に_GFILLINTERIORを指定して長方形を描画した時、縦方向
に1ドット足りない長方形になります。_GBORDERの時は正常に描画されます。
例
==
struct _xycoord p[4];
...
p[0].xcoord = 0;
p[0].ycoord = 0;
p[1].xcoord = 0;
p[1].ycoord = 1;
p[2].xcoord = 100;
p[2].ycoord = 1;
p[3].xcoord = 100;
p[3].ycoord = 0;
_polygon (_GFILLINTERIOR, p, 4)
_ellipse(_GFILLINTERIOR,,,)の動作
_ellipse関数で塗り潰し(_GFILLINTERIOR)を行う時に同色の背景色で塗り潰した場
合に、完全に塗り潰しを行いません。
//Test Program
..
_setcolor(1);
_ellipse(_GFILLINTERIOR, 100, 100, 400, 400 );
_setcolor(2);
_moveto(150, 150);
_lineto(350, 150);
printf("「線�鯢漸茲靴泙靴織n");
PrnSts_KeyWait();
_setcolor(1);
/* 次の _ellipse が正常に表示されない(_linetoで描画した線が残る ) */
_ellipse(_GFILLINTERIOR, 100, 100, 400, 400 );
_setbkcolor() で画面の範囲外まで色が変わる (DOS/V 版のみ)
_setbkcolorを使うと、VGAの場合(0,0)~(639,399)が画面の範囲になるはずですが、
この範囲を越えて塗り潰してしまいます。
例
==
#include <stdio.h>
#include <graph.h>
#include <conio.h>
void main( void )
{
_setvideomode(_VRES16COLOR);
_clearscreen(_GCLEARSCREEN);
_setbkcolor(_BLUE); /* 問題の関数 */
_setcolor(3); /* 検証の為、最大範囲で */
_rectangle(_GBORDER,0,0,639,479); /* 色を変えて枠を書く */
getch();
_setvideomode(_TEXTC80);
}
原因
====
これは _setbkcolor が呼び出している BIOS の仕様です。
_pg_chart の仕様について
プレゼンテーショングラフィックス関数の中に、折れ線グラフを表示する、
_PG_LINECHART に於いて、外枠なしの折れ線グラフを作成し、項目の最大値に限
りなく等しいデータ(最大値 1.0、データ 0.999)を連続して設定したときに、
連続したデータの間の線が表示されません。
例
==
#include <CONIO.H>
#include <GRAPH.H>
#include <PGCHART.H>
#define TEAMS 2
#define MONTHS 3
float __far values[TEAMS][MONTHS] = {
{ .999F, .999F, .671F },
{ .533F, .533F, .401F } };
char __far *months[ MONTHS ] = { "May", "June", "July" };
char __far *teams [ TEAMS ] = { "Cubs", "Reds" };
void main( void )
{
chartenv env;
_setvideomode( _MAXRESMODE );
_pg_initchart();
_pg_defaultchart( &env, _PG_LINECHART, _PG_POINTANDLINE );
env.datawindow.border = 0;
_pg_chartms( &env, months, ( float __far * )values,
TEAMS, MONTHS, MONTHS, teams );
getch();
_setvideomode( _DEFAULTMODE );
}
対応
====
上記のサンプルプログラムの例では、以下のメンバ変数の設定で可能です。
env.yaxis.autoscale
env.yaxis.scalemin
env.yaxis.scalemax
env.yaxis.scalefactor
env.yaxis.ticinterval
env.yaxis.ticformat
env.yaxis.ticdecimals
直接必要なのは、x軸を定義する _axistype 構造体の scalemax 変数ですが、
この変数を設定するには、autoscale 変数を 0 にする必要があります。0 を
設定しない限りは、autoscale に続く 7 つのメンバ変数が有効になりません。
逆に言うと、最大値を設定するために、その他の設定をおこなう必要があります。
これらの設定する値は、pgchart の座標計算においても使用されている重要な値の
ため省略して記述することはできません。不用意に 0 を設定したり、省略したり
すると実行時にエラーを引き起こす可能性がありますので、値の設定には、気を付
けてください。
浮動小数点エミュレータの演算ミス
以下のサンプルプログラムを、FPU(子プロセッサ)なし、もしくは NO87 環
境変数でコプロを使わせない状態で実行するとtan() 関数の計算結果が一部不正
になります。また、直前の cos() 関数を外すと正常に動作します。
子プロセッサを使用した状態、あるいは直前に cos() 関数を使用しない時には、
tan() 関数は、0.404... を返しますが、子プロセッサを使用せず、直前に cos()
関数の実行がされていると、i が 10 から 18、28 から 36 の時の演算結果が正
負が逆転して返されます。演算式は、ループ中変化のあるものではなく、
正負の逆転する現象がエミュレータを使用した時のみに発生します。
例
==
/*
options nothing or /Op
*/
#include <MATH.H>
#include <STDIO.H>
#define PI 3.141592653589793
void main( void )
{
double theta, t1, t2;
int i;
for( i = -9; i <= 36; i++ )
{
t1 = cos( theta = (double)i * PI / 18.0 );
t2 = tan( 22.0 * PI / 180.0 );
printf( "・ni = %3d theta = %6.3lf t1 = %6.3lf t2 = %6.3lf",
i, theta, t1, t2 );
}
}
対応
===
この現象を回避するためには 87 が使用できない場合に、tan 関数を sin()/cos() に書
き直す必要があります。
long double用のベッセル関数はMS-DOS専用
Visual C++ のオンラインヘルプ、マニュアルには、ベッセル関数の互換性について、
long double用も含めて MS-DOS、Windows および Windows DLL で利用できるように
記述されています。 しかしこれらは誤記で、long double用のベッセル関数は MS-
DOS上のみで利用可能になっています。
cl /Fa /G1 で.286pディレクティブが出力される
Visual C++ 1.0 のコンパイル時にオプション /Fa /G1 /f- を指定しアセンブラリスト
を出力すると、その内容に /G2 オプションを指定したときと同様の .286p、.287 の
ディレクティブがリストされてしまいます。
原因
====
これは、米国版 Visual C++ 1.0 のコンパイラからある不具合です。
対策
====
出力されたリストの該当するディレクティブを修正して御利用ください。
/G1 オプションを付けて出力されるコードに、i80286 ニーモニックが含まれているこ
とはありません。
_remappalette() で設定した背景色がプログラムの再起動時に再設定される。
環境
====
PC9801 シリーズ版のみ
現象
====
_setvideomode(_98RESS16COLOR) などのアナログモードの環境において発生。
_remappalette() 関数で、背景色を変更、_setvideomode(_DEFAULTMODE) を実行して
プ
ログラムを終了する。プログラムの終了時には、_remappalette() で設定した背景色も
黒に戻され終了します。しかし、再度プログラムを実行すると、_setvideomode() の実
行前に、前回設定した背景色が設定されてしまいます。
現象は、同一のプログラムの再起動に関らず発生しますが、単純に _getch() だけのよ
うな グラフィックスライブラリ関数を含まないプログラムでは発生しないようです。
再現プログラム
============
#include <stdio.h>
#include <conio.h>
#include <graph.h>
void main( void )
{
_getch();
_setvideomode( _98RESS16COLOR );
_remappalette( 0, _98BLUE );
_getch();
_setvideomode( _DEFAULTMODE );
}
_setwritemode( _GXOR ) の時、線の描画が正しく行われない(NEC 版のみ)
_setwritemode() で描画のモードを _GXOR から _GPSET に変更して同一の座標に
線をかかせても、正しく線が描かれず、色が混在して表示される事があります。
例
==
#include <stdio.h>
#include <conio.h>
#include <graph.h>
void main( void )
{
_setvideomode( _98RESS16COLOR );
_setcolor( 7 );
_getch();
_setwritemode( _GXOR );
_moveto( 260, 74 );
_lineto( 498, 288 );
_getch();
_setcolor( 4 );
_setwritemode( _GPSET );
_moveto( 260, 74 );
_lineto( 498, 288 );
_getch();
_setvideomode( _DEFAULTMODE );
}
_rectangleで描画した枠内に、_setpixel() で塗り潰しが異常(NEC 版のみ)
_rectangle( _GBORDER, ... ) で描画した枠内に、_setpixel() で点を複数表示すると、
塗り潰しが途中で停止してしまいます。枠内に表示する点がある程度、密になると発
生します。下記のサンプルプログラムでは、WIDTH の値が 6 以下だと塗り潰しが完
全にできません。
_setpixel() と _fllodfill() の実行順序を逆にすれば現象の回避は出来ます。
回避プログラム
===========
#include <STDIO.H>
#include <GRAPH.H>
#include <CONIO.H>
#include <STDLIB.H>
void main( int argc, char *argv[] )
{
int WIDTH;
int x, y, ofs, color;
int fillx, filly;
WIDTH = atoi( argv[1] );
WIDTH = (WIDTH<=0) ? 5 : WIDTH;
printf("%d", WIDTH );
_setvideomode( _98RESS16COLOR );
_rectangle( _GBORDER, 1, 1, 638, 398 );
ofs = 0;
for( y = 0; y < 398; y+=WIDTH )
for( ofs = 0; ofs < (WIDTH*WIDTH); ofs+=WIDTH )
for( x = ofs; x < 639; x+=WIDTH )
_setpixel( (short)x, (short)y );
color = _setcolor( 4 );
fillx = 77;
filly = 77;
if( fillx % WIDTH == 0 ) fillx++;
if( filly % WIDTH == 0 ) filly++;
_floodfill( (short)fillx, (short)filly, (short)color );
_getch();
_setvideomode( _DEFAULTMODE );
}
同じ座標で斜線の再描画をXORモードで行うと斜線が残る事がある(NEC 版の
み)
同一の座標に対して、_setwritemode(_GXOR) の設定で再描画を行えば、線は消去さ
れるはずであるが、一部点の残ってしまうことがある。以下のサンプルプログラムで
は、(50,50)-(100,100) の線分は、正しく消去されるが、(0, 0)-(639,399) の線分は、一
部点が残ってしまう。
例
==
#include <GRAPH.H>
#include <CONIO.H>
void main( void )
{
_setvideomode( _98RESS16COLOR );
_setcolor( 3 );
_moveto( 50, 50 );
_lineto( 100, 100 );
_moveto( 0, 0 );
_lineto( 639, 399 );
_getch();
_setwritemode( _GXOR );
_moveto( 50 , 50 );
_lineto( 100, 100 );
_moveto( 0, 0 );
_lineto( 639, 399 );
_getch();
_setvideomode( _DEFAULTMODE );
}
=============================================================
Microsoft、MS、Windows、MS-DOS、CodeView は登録商標です。Visual C++、Visual
Basic は Microsoft Corporation の商標です。その他、記載されている会社名、製品名
は、各社の商標または登録商標です。
Technical Details
Message-ID:
<NEWTNews.814771996.27388.test3@japan4.netmanage.com>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: fe8aa,898004eab57a0e0d,start X-Google-Attributes: gidfe8aa,public From: test3@japan4.netmanage.com Subject: test-ignore別のファイル Date: 1995/10/26 Message-ID: <NEWTNews.814771996.27388.test3@japan4.netmanage.com> X-Deja-AN: 118216373 organization: PSI Public Usenet Link content-type: TEXT/PLAIN; charset=ISO-2022-JP mime-version: 1.0 newsgroups: ca.test