インテル® MKL 2018 デベロッパー・ガイド

cdecl インターフェイスと stdcall インターフェイスの使用

cdecl と stdcall の呼び出し規則は、呼び出し後のスタックの復元方法が異なります。インテル® MKL は、mkl_intel_c[_dll].lib およびmkl_intel_s[_dll].lib インターフェイス・ライブラリーにより、IA-32 アーキテクチャーの実装で両方の規則をサポートしています。以下の表で説明されているように、これらのライブラリーは異なるコンパイラーのデフォルトを仮定します。呼び出すプログラムに渡すパラメーターのリストの文字列長の位置も異なります。

スタティック・リンク用ライブラリー

ダイナミック・リンク用ライブラリー

呼び出し規則

パラメーター・リストの文字列長の位置

mkl_intel_c.lib

mkl_intel_c_dll.lib

cdecl

リストの最後

インテル® C++ コンパイラーおよびインテル® Fortran コンパイラーのデフォルト

mkl_intel_s.lib

mkl_intel_s_dll.lib

stdcall

文字列アドレスの直後

Compaq* Visual Fortran (CVF) コンパイラーのデフォルト

重要

エラーを回避するため、呼び出すプログラムと呼び出されたプログラムが同じ呼び出し規則を使用していることを確認します。

cdecl または stdcall 呼び出し規則を使用するには、適切な呼び出し構文 (C アプリケーション) および適切なコンパイラー・オプション (Fortran アプリケーション) を使用します。

C コンパイラーを使用する場合、cdecl または stdcall インターフェイス・ライブラリーをリンクするには、以下の表で説明されているように、コードでインテル® MKL ルーチンを呼び出します。

インターフェイス・ライブラリー

インテル® MKL ルーチンの呼び出し

mkl_intel_c[_dll].lib

以下の宣言を使用します。

<型>名前 ( <プロトタイプ変数 1>, <プロトタイプ変数 2>, ..); 

mkl_intel_s[_dll].lib

以下のステートメントを使用してルーチンを呼び出します。

extern __stdcall name( <プロトタイプ変数 1>,<プロトタイプ変数 2>, ..);

Fortran コンパイラーを使用する場合、cdecl または stdcall インターフェイス・ライブラリーをリンクするには、以下の表で説明されているように、コンパイラー・オプションを指定します。

インターフェイス・ライブラリー

コンパイラー・オプション

内容

インテル® Fortran コンパイラー

mkl_intel_c[_dll].lib

デフォルト

 

mkl_intel_s[_dll].lib

/Gm
または
/iface:cvf

/Gm および /iface:cvf オプションは、CVF と Powerstation の呼び出し規則を互換にします。

CVF コンパイラー

mkl_intel_s[_dll].lib

デフォルト

 

mkl_intel_c[_dll].lib

/iface=(cref, nomixed_str_len_arg)

 

関連情報