本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[MSVC] Visual C++ 1.5 の README.WRI(2/8)

文書番号: 401967

最終更新日: 1999/08/19


この資料は以下の製品について記述したものです。


この記事は、以前は次の ID で公開されていました: JP401967

概要

この資料は、Visual C++ 1.5 に添付されている README.WRI の以下の章を抜粋
したものです。
第 2 章 Visual Workbench

第 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 デバッガと 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 Professional Edition で提供される VBX コントロールサンプルのビルド

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 を終了するとペンが再び使えるようになります。

Keywords: KBINFO VC15 KB401967
Technology: kbAudDeveloper kbvc150 kbVCsearch

inserted by FC2 system