EHLLAPI 呼び出し形式
EHLLAPI エントリー・ポイント (hllapi) は、常に以下の 4 つのパラメーターを用いて呼び出されます。
- EHLLAPI 関数番号 (入力)
- データ・バッファー (入出力)
- バッファー長 (入出力)
- 位置 (入力) ; 戻りコード (出力)
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 関数の説明では (情報がある場合)、どのような情報がこれらの パラメーターに戻されるかを示しています。