ここでは、インテル® Visual Fortran アプリケーションによる Windows* API ルーチンの呼び出しに関する一般情報を説明します。説明する内容は次のとおりです。
インテル® Visual Fortran インターフェイス定義をインクルードした後で、適切な Windows* API ルーチンを呼び出すには、次のガイドラインに従ってください。
Platform SDK の適切なルーチン (例: GetSystemTime) に関するドキュメントで、次の情報を確認します。
引数の数および順序。適切なデータ型を使用して各可変長引数を宣言し、初期化する必要があります。GetSystemTime ルーチンの場合、structure (派生型) は参照によって渡されます。
文字引数があれば、Windows* API ルーチンを呼び出す前に、終端文字として NULL 文字を追加します。
ルーチンが結果を返すかどうか (返す場合は関数、返さない場合はサブルーチン)。例えば、GetSystemTime ルーチンの呼び出し形式は VOID のため、このルーチンは CALL 文を使用して、サブルーチンとして呼び出す必要があります。
引数のデータ型または関数の戻り値がわからない場合、...\INCLUDE\ ディレクトリー以下の適切な .F90 ファイルからインターフェイス定義を確認することができます。例えば、GetSystemTime のインターフェイス定義を参照するには、次のように操作します。
テキストエディター (メモ帳など) で ...\INCLUDE\ ディレクトリーの kernel32.f90 ファイルを開きます。
ルーチン名 (GetSystemTime など) を検索します。
インターフェイス定義と Platform SDK ドキュメントの Fortran で表現されている引数とを比較します。引数の渡し方に注意してください。場合によっては (任意のデータ型がアドレスによって渡される場合など)、直接変数を渡すのではなく、LOC 組み込み関数を使用して、変数のアドレスを渡さなければなりません。
引数の 1 つが構造体の場合、...\INCLUDE\ ディレクトリー以下の IFWINTY.F90 ファイルから定義を参照してください。例えば、GetSystemTime で使用する T_SYSTEMTIME データ型の定義を参照するには、次のように操作します。
テキストエディター (メモ帳など) で ...\INCLUDE\ ディレクトリーの IFWINTY.F90 ファイルを開きます。
データ型名 (T_SYSTEMTIME など) を検索します。
データ型の定義のフィールド名に注意してください。場合によっては、Platform SDK ドキュメントにリストされた定義とは多少異なることがあります。
変数名を定義して、プログラム内で派生型の定義を使用します。次に例を示します。
TYPE (T_SYSTEMTIME) MYTIME
変数の定義を利用して、Win32 ルーチンを呼び出します。完成したプログラムの例を次に示します。
! Getsystime.f90 file shows how to call a Windows API routine ! Since the only routine called is GetSystemTime, only include ! interface definitions from kernel32.mod instead of all modules ! included by ifwin.f90. Type definitions are defined in IFWINTY, ! which is used within KERNEL32. 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 値をテストしないでください。
対応する引数のデータ型に関する注意事項:
引数が Platform SDK ドキュメントでポインターとして説明されている場合、それに対応する Fortran インターフェイス定義には REFERENCE プロパティーがあります (cDEC$ ATTRIBUTES 宣言子を参照)。古いインターフェイス定義では、Cray* 形式のポインターデータ型が使用され、引数のアドレスを渡します。
IA-32 アーキテクチャー・ベースのシステムでは、ポインター引数は 32 ビット (4 バイト) 長です。インテル® 64 アーキテクチャー・ベースのシステムでは、ポインター引数は 64 ビット (8 バイト) 長です。
Fortran 文字変数は、NULL 文字で終了する必要があります。このコードでは、Fortran DATA 文に含まれている文字列に NULL 終端文字を使用しています (C 文字列を参照)。
DATA forstring /'This is a null-terminated string.'C/
また、CHAR 組み込み関数を使用することもできます。
character(LEN=32) forstring
WINDOWS.H 内の構造体は、IFWINTY の構造型に変換されました。構造体の中の共用体は、派生型の中で共用体/マップに変換されます。
一般的に、コンポーネントの名前は変更されません。C の bitfield 型は、Fortran へ直接変換されません。bitfield 型のコレクションは、Fortran の INTERGER 型として宣言され、個々の bitfield 型は、ソース (IFWINTY.F90) 内でコメントとして記述されます。特定の Windows* の宣言がどのように Fortan へ変換されるか確認するには、Include フォルダーにある適切な .F90 ソースファイルで対応する宣言を参照してください。
© 1996-2011 Intel Corporation. 無断での引用、転載を禁じます。