EHLLAPI 呼び出し形式

EHLLAPI エントリー・ポイント (hllapi) は、常に以下の 4 つのパラメーターを用いて呼び出されます。
  1. EHLLAPI 関数番号 (入力)
  2. データ・バッファー (入出力)
  3. バッファー長 (入出力)
  4. 位置 (入力) ; 戻りコード (出力)
IBM® 標準 EHLLAPI のプロトタイプは次のとおりです。
[long hllapi (LPWORD, LPSTR, LPWORD, LPWORD);
IBM 拡張 EHLLAPI のプロトタイプは次のとおりです。
[long hllapi (LPINT, LPSTR, LPINT, LPINT);
各パラメーターは、値ではなく、参照によって受け渡されます。したがって、関数呼び出しの各パラメーターは、値そのものではなく、値を指すポインターとなっている必要があります。例えば、EHLLAPI Query Session Status 関数の呼び出しの正しい例は、 以下のとおりです。
    #include "hapi_c.h"
    struct HLDQuerySessionStatus QueryData;
    int    Func, Len, Rc;
    long   Rc;
 
    memset(QueryData, 0, sizeof(QueryData)); // Init buffer
    QueryData.qsst_shortname = 'A';          // Session to query
    Func = HA_QUERY_SESSION_STATUS;          // Function number
    Len  = sizeof(QueryData);                // Len of buffer
    Rc   = 0;                                // Unused on input
 
    hllapi(&Func, (char *)&QueryData, &Len, &Rc);  // Call EHLLAPI
    if (Rc != 0) {                            // Check return code
      // ...Error handling
    }
hllapi 呼び出しのすべてのパラメーターはポインターであり、EHLLAPI 関数の戻りコードは、この関数の値としてではなく、4 番目のパラメーターの値で戻されます。例えば、次の例は正しくありません
    if (hllapi(&Func, (char *)&QueryData, &Len, &Rc) != 0) { // WRONG!
      // ...Error handling
    }

hllapi 関数は、IBM 標準および拡張 EHLLAPI の場合には long データ・タイプを、WinHLLAPI の場合には void データ・タイプを戻すように定義されていますが、その値は未定義なので使用することはできません。

hllapi 呼び出しの 2 番目から 4 番目までのパラメーターは、 アプリケーションに情報を戻すことができます。各 EHLLAPI 関数の説明では (情報がある場合)、どのような情報がこれらの パラメーターに戻されるかを示しています。