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

[MSVC] MOVEオーバーレイを行うとINT 3FHの割り込みアドレスが戻らない

文書番号: 402023

最終更新日: 1999/03/19


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


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

概要

この資料は MOVE オーバーレイを使用した場合、INT 3FH の割り込みアドレスが
書き変わり、元のアドレスに復元されない現象について説明したものです。

詳細

Microsoft Overlay Virtual Environment (MOVE) は INT 3FH を使用してオーバー
レイ関数を呼び出します。このソフトウェア割り込み( INT 3FH )を使う方法は、
既にメモリに読み込まれているオーバーレイ関数を頻繁に呼んでいる場合に、
効率的に処理できます。たとえ、メモリ中に存在しているオーバーレイ関数でも、
このソフトウェア割り込みを使用して呼ばれます。しかし、ある場合において、
プログラムが終了しても、このソフトウェア割り込み( INT 3FH )のアドレスが
書き変わったままで元に戻らない場合があります。
この現象は、グラフィックスライブラリと一緒に使用した場合に発生します。

対処方法

以下の方法で回避できます。
  1. リンクオプションで割り込み番号を変更する。 /OV[ERLAYINTERRUPT]:n で割り込み番号を変更します。 デフォルトは 63 ( 16 進数では 3F )です。
  2. アプリケーション終了時に元に戻す。 アプリケーションの終了処理で、MOVE オーバーレイで使用した割り込み アドレスをプログラムで元に戻します。 /*
        * MOVE オーバーレイで使用した割り込みアドレスを元に戻す
        */
    
    extern unsigned char _pascal $$INTNO ; // 割り込み番号 extern unsigned int _ovlvec ; // 以前の割り込みアドレス void EndProcess () // アプリケーション終了処理関数サンプル {
           _asm {
              push    ds
              mov     al,$$INTNO
              mov     dx,_ovlvec[0]
              mov     ds,_ovlvec[2]
              mov     ah,25H
              int     21H
              pop     ds
           }
    
    }

詳細

  • Visual C++ は、米国 Microsoft Corporation の商標です。

Keywords: C7 KBPRB VC10 VC15 KB402023
Technology: kbAudDeveloper kbvc150 kbVCsearch kbZNotKeyword3 kbZNotKeyword8

inserted by FC2 system