お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"9x のリソース不足を未然に防ぐ。"

この発言に対し以下のコメントが寄せられています
#01013 遠藤 俊裕   さん RE:9x のリソース不足を未然に防ぐ。

9x ではリソース不足などというわけのわからないもののおかげで window の生成に注意を払わなければならないと言うわけの分から ないプログラミングをしなければなりません。 でも、リソースを調べるにはサンクなどというこれまたわけの分 からないものを使わなくてはならず困ってしまいます。 そのためのサンプルを示します。 Thunk についてはこの辺がよさげかと。 http://www.itecuk.com/delmag/thunk95.htm ただ、Thunk は NT には無い機能なので、NT とソースが混在出来 ない欠点があります。 このサンプルはそれも回避しています。 つまり、9x でも NT でも動きます。 ,,,,, type EThunkError = class(Exception); function CheckMemory: Boolean; procedure ShowError(ErrNo: Integer); implementation {$R *.DFM} function LoadLibrary16(dllName: PChar): THandle; stdcall; external 'kernel32.dll' index 35; function FreeLibrary16(hHand: THandle): Integer; stdcall; external 'kernel32.dll' index 36; function GetProcAddress16(handle: integer; ProcName: PChar): pointer; stdcall; external 'kernel32.dll' index 37; function GetFreeSysRes(SysRes: Word): Word; var ThunkTrash : array[0..$20] of Word; hInst : THandle; globalPointer : Pointer; QT_Thunk : TProcedure; Kernel32Mod : THandle; begin Result := 100; if SysUtils.Win32Platform = VER_PLATFORM_WIN32_NT then exit; // else if SysUtils.Win32Platform = VER_PLATFORM_WIN32_WINDOWS then // isWin9x; ThunkTrash[0] := 0; Kernel32Mod := GetModuleHandle('Kernel32.Dll'); QT_Thunk := GetProcAddress(Kernel32Mod, 'QT_Thunk'); try if @QT_Thunk = nil then raise EThunkError.Create('Flat thunks only supported under Windows 95'); except exit; end; hInst := LoadLibrary16('user.exe'); globalPointer := GetProcAddress16(hInst, 'GetFreeSystemResources'); asm push SysRes mov edx, globalPointer call QT_Thunk mov Result, ax end; FreeLibrary16(hInst); end; Function CheckMemory: Boolean; begin Result := False; if GetFreeSysRes(0) < 10 then Result := True; // 各リソースが 10% if GetFreeSysRes(1) < 10 then Result := True; // 以下になったら不 if GetFreeSysRes(2) < 10 then Result := True; // 安定と判断。 end; Procedure ShowError( ErrNo: Integer ); begin case ErrNo of 1: MessageDlg( 'メモリ不足です。いくつかのウィンドウを閉じるか' + #13#10 + '他のアプリケーションを終了して下さい。', mtError, [mbOK], 0 ); end; end; 使い方は if CheckMemory then ShowError( 1 ); とかです。 00/01/29(土) 21:44 遠藤 俊裕(SGU02140) Original document by 遠藤 俊裕   氏 ID:(SGU02140)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum