インテル® Fortran コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス

Windows* API ルーチンの呼び出し

ここでは、インテル® Visual Fortran アプリケーションによる Windows* API ルーチンの呼び出しに関する一般情報を説明します。説明する内容は次のとおりです。

インテル® Visual Fortran インターフェイス定義を使用した Windows* API ルーチンの呼び出し

インテル® Visual Fortran インターフェイス定義をインクルードした後で、適切な Windows* API ルーチンを呼び出すには、次のガイドラインに従ってください。

  1. Windows* API の適切なルーチン (例: GetSystemTime) に関するドキュメントで、次の情報を確認します。

    • 引数の数および順序。適切なデータ型を使用して各可変長引数を宣言し、初期化する必要があります。GetSystemTime ルーチンの場合、structure (派生型) は参照によって渡されます。

      文字引数があれば、Windows* API ルーチンを呼び出す前に、終端文字として NULL 文字を追加します。

    • ルーチンが結果を返すかどうか (返す場合は関数、返さない場合はサブルーチン)。例えば、GetSystemTime ルーチンの呼び出し形式は VOID のため、このルーチンは CALL 文を使用して、サブルーチンとして呼び出す必要があります。

  2. 引数のデータ型または関数の戻り値が分からない場合、...\INCLUDE\ ディレクトリー以下の適切な .F90 ファイルからインターフェイス定義を確認することができます。例えば、GetSystemTime のインターフェイス定義を参照するには、次のように操作します。

    • テキストエディター (メモ帳など) で ...\INCLUDE\ ディレクトリーの kernel32.f90 ファイルを開きます。

    • ルーチン名 (GetSystemTime など) を検索します。

    • インターフェイス定義と Windows* API ドキュメントの Fortran で表現されている引数とを比較します。引数の渡し方に注意してください。場合によっては (任意のデータ型がアドレスによって渡される場合など)、直接変数を渡すのではなく、LOC 組込み関数を使用して、変数のアドレスを渡さなければなりません。

  3. 引数の 1 つが構造体の場合、...\INCLUDE\ ディレクトリー以下の IFWINTY.F90 ファイルから定義を参照してください。例えば、GetSystemTime で使用する T_SYSTEMTIME データ型の定義を参照するには、次のように操作します。

    • テキストエディター (メモ帳など) で ...\INCLUDE\ ディレクトリーの IFWINTY.F90 ファイルを開きます。

    • データ型名 (T_SYSTEMTIME など) を検索します。

    • データ型の定義のフィールド名に注意してください。場合によっては、Windows* API ドキュメントにリストされた定義とは多少異なることがあります。

    • 変数名を定義して、プログラム内で派生型の定義を使用します。次に例を示します。

      TYPE (T_SYSTEMTIME) MYTIME
  4. 多くの Windows* API ルーチンには、"handle" と呼ばれる引数または戻り値があります。一般に、これはアドレスサイズの整数で、適切な KIND 値 (通常は、32 ビット/64 ビット・プラットフォームの正しい値を提供する HANDLE) で宣言されていなければなりません。次に例を示します。

    Integer(HANDLE) :: hwnd

変数の定義を利用して、Win32 ルーチンを呼び出します。完成したプログラムの例を次に示します。

! Getsystime.f90 file: Windows* API ルーチンの呼び出し方法を示します。
! 呼び出されるルーチンは GetSystemTime だけなので、ifwin.f90 で
! インクルードされるすべてのモジュールの代わりに、kernel32.mod の
! インターフェイス定義のみインクルードします。KERNEL32 内で
! 使用される型定義は IFWINTY で定義されます。
PROGRAM Getsystime 
USE KERNEL32 
TYPE (T_SYSTEMTIME) MYTIME 
CALL GetSystemTime(MYTIME) 
WRITE (*,*) 'Current UTC time hour and minute:', Mytime.wHour, Mytime.Wminute 
END PROGRAM

新規の Fortran コンソール (または QuickWin) アプリケーション・プロジェクトを作成し、上記のコードをソースファイルとして追加およびビルドして、結果を表示することができます。

データ型の相違点の理解

IFWIN およびその他の Win32 API モジュールで使用される IFWINTY モジュールは、Windows* の WINDOWS.H ヘッダーファイルで提供される多くの型定義に対応する INTEGER および REAL 種別の定数を定義します。INTEGER 宣言および REAL 宣言で、これらの種別の値を使用します。次の表は、一般的な Windows* の型と対応するデータ型を示しています。

Windows* データ型

対応する Fortran データ型

BOOL、BOOLEAN

INTEGER(BOOL)

BYTE

INTEGER(BYTE)

CHAR、CCHAR、UCHAR

CHARACTER または INTEGER(UCHAR)

DWORD

INTEGER(DWORD)

ULONG

INTEGER(ULONG)

SHORT

INTEGER(SHORT)

LPHANDLE

INTEGER(LPHANDLE)

PLONG

INTEGER(PLONG)

DOUBLE

REAL(DOUBLE)

明示的に種別を数値として指定したり、デフォルトの種別を仮定する代わりに、これらの定数を使用してください。

Windows* の BOOL 型は、Fortran の LOGICAL と同等ではありません。Fortran の LOGICAL 演算子およびリテラル定数とともに使用しないでください。Fortran のリテラルの .TRUE. および .FALSE. ではなく、IFWINTY で定義した定数の TRUE および FALSE を使用してください。また、LOGICAL 式を使用して、BOOL 値をテストしないでください。

対応する引数のデータ型に関する注意事項:

WINDOWS.H 内の構造体は、IFWINTY の構造型に変換されました。構造体の中の共用体は、派生型の中で共用体/マップに変換されます。

一般的に、コンポーネントの名前は変更されません。C の bitfield 型は、Fortran へ直接変換されません。bitfield 型のコレクションは、Fortran の INTERGER 型として宣言され、個々の bitfield 型は、ソース (IFWINTY.F90) 内でコメントとして記述されます。特定の Windows* の宣言がどのように Fortran へ変換されるか確認するには、Include フォルダーにある適切な .F90 ソースファイルで対応する宣言を参照してください。