文書番号: 402023
最終更新日: 1999/03/19
この資料は以下の製品について記述したものです。
- Microsoft(R) C/C++ Development System for MS-DOS(R) and Windows(R)Version 7.0A
- Microsoft(R) Visual C++(TM) Development System Standard Edition forWindows(R) Version 1.0
- Microsoft(R) Visual C++(TM) Development System Professional Edition forWindows(R) Version 1.0
- Microsoft(R) Visual C++(TM) Development System for Windows(R) Version 1.5(以下 Visual C++ 1.5)
この記事は、以前は次の ID で公開されていました: JP402023
概要
この資料は MOVE オーバーレイを使用した場合、INT 3FH の割り込みアドレスが
書き変わり、元のアドレスに復元されない現象について説明したものです。
詳細
Microsoft Overlay Virtual Environment (MOVE) は INT 3FH を使用してオーバー
レイ関数を呼び出します。このソフトウェア割り込み( INT 3FH )を使う方法は、
既にメモリに読み込まれているオーバーレイ関数を頻繁に呼んでいる場合に、
効率的に処理できます。たとえ、メモリ中に存在しているオーバーレイ関数でも、
このソフトウェア割り込みを使用して呼ばれます。しかし、ある場合において、
プログラムが終了しても、このソフトウェア割り込み( INT 3FH )のアドレスが
書き変わったままで元に戻らない場合があります。
この現象は、グラフィックスライブラリと一緒に使用した場合に発生します。
対処方法
以下の方法で回避できます。
-
リンクオプションで割り込み番号を変更する。
/OV[ERLAYINTERRUPT]:n で割り込み番号を変更します。
デフォルトは 63 ( 16 進数では 3F )です。
-
アプリケーション終了時に元に戻す。
アプリケーションの終了処理で、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
}
}
Keywords: C7 KBPRB VC10 VC15 KB402023
Technology: kbAudDeveloper kbvc150 kbVCsearch kbZNotKeyword3 kbZNotKeyword8