配信要求拡張API
配信要求または再配信要求を発行するAPIです。
構文
INT __stdcall utlsendex( LPCSTR lpszFileID , LPCSTR lpszHostName , BOOL bResend , SHORT nPriority , BOOL bSync , INT nWait , LPCSTR lpszFileName , LPCSTR lpszGroup , BOOL bNp , HULMSGS* lpMsg , INT nTransMode );
パラメーター説明
- LPCSTR lpszFileID(IN)
-
配信要求をするファイルIDを指定
50バイト以内の文字列で指定します。省略する場合は“NULL”を指定します。
- LPCSTR lpszHostName(IN)
-
配信時の動的配信先ホスト名、または再配信時のホスト名を指定
68バイト以内の文字列で指定します。
「lpszGroup」と同時に指定できません。
配信時、このパラメーターを使用するためにはシステム動作環境設定ファイルの動的パラメータ指定(dynparam)を「動的変更可能」に設定する必要があります。
動的パラメータ指定の詳細は、以下を参照してください。
HULFT10 for Windows アドミニストレーション マニュアル : 集配信
- BOOL bResend(IN)
-
再配信フラグを指定
- TRUE
-
: 再配信要求を指定
- FALSE
-
: 配信要求を指定
- SHORT nPriority(IN)
-
転送優先度を指定
“1”~“256”の範囲で指定します。省略する場合は“0”を指定してください。
- BOOL bSync(IN)
-
同期転送フラグを指定
再配信要求(bResend=TRUE)の場合は、同期転送指定はできません。
- TRUE
-
: 同期転送する
- FALSE
-
: 同期転送しない
- INT nWait(IN)
-
同期転送時の処理結果受信待ち時間を指定(秒)
同期転送時に処理結果を受け取るために同期をとる時間を、“10”~“259200”の範囲で指定します。この時間に至ると、たとえ配信中であっても処理を戻します。その場合、転送結果は戻りませんので注意してください。
同期転送指定の場合(bSync=TRUE)のみ有効となります。同期転送しない場合(bSync=FALSE)は“0”を指定します。
同期転送指定時に“0”を指定した場合、システム動作環境設定ファイルのソケットリードタイムアウトで設定された値を使用します。
- LPCSTR lpszFileName(IN)
-
配信または再配信したいファイル名を指定
200バイト以内の絶対パスで指定します。省略する場合は“NULL”を指定します。
配信時は、省略すると、配信管理情報に登録されている配信ファイル名が設定されます。このパラメーターを使用するためにはシステム動作環境設定ファイルの動的パラメータ指定(dynparam)を「動的変更可能」に設定する必要があります。
動的パラメータ指定の詳細は、以下を参照してください。
HULFT10 for Windows アドミニストレーション マニュアル : 集配信
再配信時は、すでに再配信待ち状態にあるファイル名を指定してください。再配信ファイルを動的に指定するパラメーターではありません。省略すると、パラメーターに指定されたホスト名またはファイルIDに一致したすべての転送の再配信が行われます。
- LPCSTR lpszGroup(IN)
-
配信したい転送グループIDを指定
50バイト以内の文字列で指定します。
「lpszHostName」と同時に指定できません。
省略する場合は“NULL”を指定します。省略時は配信管理情報に登録されている、転送グループIDが設定されます。このパラメーターを使用するためにはシステム動作環境設定ファイルの動的パラメータ指定(dynparam)を「動的変更可能」に設定する必要があります。
動的パラメータ指定の詳細は、以下を参照してください。
HULFT10 for Windows アドミニストレーション マニュアル : 集配信
- BOOL bNp(IN)
-
チェックポイントフラグを指定
配信要求(bResend=FALSE)の場合は、必ず“FALSE”を指定してください。
- TRUE
-
: ファイルの先頭から再配信要求を行う
- FALSE
-
: チェックポイント再配信要求を行う
- HULMSGS* lpMsg(IN)
-
メッセージ構造体を指定
再配信要求(bResend=TRUE)の場合は、必ず“NULL”を指定してください。
省略する場合も“NULL”を指定します。
構造体の内容は以下のとおりです。
拡張メッセージを使用しない場合は、メッセージ構造体に exmsginfoを含める必要はありません。
typedef struct _tagHULMSGS { DWORD msgcnt; // 格納しているメッセージ数 CHAR** msginfo; // メッセージテーブル($MSG0~$MSG5) CHAR** exmsginfo; // 拡張メッセージテーブル($MSGL0 ~ $MSGL1) } HULMSGS;
- DWORD msgcnt
-
格納しているメッセージ数
拡張メッセージを使用しない場合は“6”を指定してください。
拡張メッセージを使用する場合は“8”を指定してください。
- CHAR** msginfo
-
メッセージを指定
各メッセージは最大50バイトまで指定できます。「メッセージ数(6)×(最大長50バイト+1)」の領域を固定で確保してください。各メッセージは先頭から51バイトごとに指定してください。関数の終了時には、メモリーの解放を行ってください。
- CHAR** exmsginfo
-
拡張メッセージを指定
拡張メッセージを使用する場合に指定します。
拡張メッセージは最大200バイトまで指定できます。「拡張メッセージ数(2)×(最大長200バイト+1)」の領域を固定で確保してください。各メッセージは先頭から201バイトごとに指定してください。関数の終了時には、メモリーの解放を行ってください。
- INT nTransMode(IN)
-
転送モードを指定
固定で“0”を指定してください。
戻り値
正常時は「0」です。エラー時のステータスはutlsend.exeのエラーコードと同様です。
詳細は、以下を参照してください。
HULFT10 for Windows エラーコード・メッセージ : 配信要求コマンド(utlsend.exe)
使用例
Visual C++から使用する場合(拡張メッセージを使用しない場合)
#include <windows.h> #include <stdio.h> #pragma pack(push,8) typedef struct { DWORD msgcnt; CHAR** msginfo; } HULMSGS; #pragma pack(pop) typedef INT (__stdcall *LPUTLSENDEX)( LPCSTR lpszFileID, LPCSTR lpszHostName, BOOL bResend, SHORT nPriority, BOOL bSync, INT nWait, LPCSTR lpszFileName, LPCSTR lpszGroup, BOOL bNp, HULMSGS* lpMsg, INT nTransMode); int main() { CHAR szFileID[50+1]; CHAR szHostName[68+1]; SHORT nPriority; BOOL bResend; BOOL bSync; INT nWait; CHAR szFileName[200+1]; CHAR szGroup[50+1]; BOOL bNp; HULMSGS sMsgInfo; CHAR* msgbodyptr[6]; CHAR msgbody[(50+1)*6]; INT nTransMode; INT i; HMODULE hHulDll; HMODULE hApiDll; LPUTLSENDEX lpUtlsendex; INT nStatus; strcpy_s(szFileID, sizeof(szFileID), "TEST0001"); strcpy_s(szHostName, sizeof(szHostName), ""); bResend = FALSE; nPriority = 50; bSync = TRUE; nWait = 300; strcpy_s(szFileName, sizeof(szFileName), ""); strcpy_s(szGroup, sizeof(szGroup), ""); bNp = FALSE; nTransMode = 0; sMsgInfo.msgcnt = 6; sMsgInfo.msginfo = msgbodyptr; for (i = 0; i < 6; i++) { sMsgInfo.msginfo[i] = &msgbody[51*i]; } strcpy_s(sMsgInfo.msginfo[0], 51, "C:\\hulft\\"); strcpy_s(sMsgInfo.msginfo[1], 51, ""); strcpy_s(sMsgInfo.msginfo[2], 51, ""); strcpy_s(sMsgInfo.msginfo[3], 51, "Data1.dat"); strcpy_s(sMsgInfo.msginfo[4], 51, ""); strcpy_s(sMsgInfo.msginfo[5], 51, ""); hApiDll = LoadLibraryEx("C:\\HULFT Family\\hulft10\\bin\\hulapi.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH); if (hApiDll == NULL) { printf("Unable to load hulapi.dll." "(Error code = %lu)\n", GetLastError()); FreeLibrary(hHulDll); return 2; } lpUtlsendex = (LPUTLSENDEX)GetProcAddress(hApiDll, "utlsendex"); if (lpUtlsendex == NULL) { printf("Unable to retrieves the address of HULFT API." "(Error code=%lu)\n", GetLastError()); FreeLibrary(hApiDll); FreeLibrary(hHulDll); return 3; } nStatus = lpUtlsendex(szFileID, szHostName, bResend, nPriority, bSync, nWait, szFileName, szGroup, bNp, &sMsgInfo, nTransMode); if (nStatus == 0) { printf("Terminated normally.\n"); } else { printf("Error occurred when calling HULFT API." "(Returned value=%d)\n", nStatus); } FreeLibrary(hApiDll); FreeLibrary(hHulDll); return 0; }
Visual C++から使用する場合(拡張メッセージを使用する場合)
#include <windows.h> #include <stdio.h> #pragma pack(push,8) typedef struct { DWORD msgcnt; CHAR** msginfo; CHAR** exmsginfo; } HULMSGS; #pragma pack(pop) typedef INT (__stdcall *LPUTLSENDEX)( LPCSTR lpszFileID, LPCSTR lpszHostName, BOOL bResend, SHORT nPriority, BOOL bSync, INT nWait, LPCSTR lpszFileName, LPCSTR lpszGroup, BOOL bNp, HULMSGS* lpMsg, INT nTransMode); int main() { CHAR szFileID[50+1]; CHAR szHostName[68+1]; SHORT nPriority; BOOL bResend; BOOL bSync; INT nWait; CHAR szFileName[200+1]; CHAR szGroup[50+1]; BOOL bNp; HULMSGS sMsgInfo; CHAR* msgbodyptr[6]; CHAR msgbody[(50+1)*6]; CHAR* exmsgbodyptr[2]; CHAR exmsgbody[(200+1)*2]; INT nTransMode; INT i; HMODULE hHulDll; HMODULE hApiDll; LPUTLSENDEX lpUtlsendex; INT nStatus; strcpy_s(szFileID, sizeof(szFileID), "TEST0001"); strcpy_s(szHostName, sizeof(szHostName), ""); bResend = FALSE; nPriority = 50; bSync = TRUE; nWait = 300; strcpy_s(szFileName, sizeof(szFileName), ""); strcpy_s(szGroup, sizeof(szGroup), ""); bNp = FALSE; nTransMode = 0; sMsgInfo.msgcnt = 8; sMsgInfo.msginfo = msgbodyptr; for (i = 0; i < 6; i++) { sMsgInfo.msginfo[i] = &msgbody[51*i]; } strcpy_s(sMsgInfo.msginfo[0], 51, "C:\\hulft\\"); strcpy_s(sMsgInfo.msginfo[1], 51, ""); strcpy_s(sMsgInfo.msginfo[2], 51, ""); strcpy_s(sMsgInfo.msginfo[3], 51, "Data1.dat"); strcpy_s(sMsgInfo.msginfo[4], 51, ""); strcpy_s(sMsgInfo.msginfo[5], 51, ""); sMsgInfo.exmsginfo = exmsgbodyptr; for (i = 0; i < 2; i++) { sMsgInfo.exmsginfo[i] = &exmsgbody[201*i]; } strcpy_s(sMsgInfo.exmsginfo[0], 201, "Data2.dat"); strcpy_s(sMsgInfo.exmsginfo[1], 201, ""); hApiDll = LoadLibraryEx("C:\\HULFT Family\\hulft10\\bin\\hulapi.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH); if (hApiDll == NULL) { printf("Unable to load hulapi.dll." "(Error code = %lu)\n", GetLastError()); FreeLibrary(hHulDll); return 2; } lpUtlsendex = (LPUTLSENDEX)GetProcAddress(hApiDll, "utlsendex"); if (lpUtlsendex == NULL) { printf("Unable to retrieves the address of HULFT API." "(Error code=%lu)\n", GetLastError()); FreeLibrary(hApiDll); FreeLibrary(hHulDll); return 3; } nStatus = lpUtlsendex(szFileID, szHostName, bResend, nPriority, bSync, nWait, szFileName, szGroup, bNp, &sMsgInfo, nTransMode); if (nStatus == 0) { printf("Terminated normally.\n"); } else { printf("Error occurred when calling HULFT API." "(Returned value=%d)\n", nStatus); } FreeLibrary(hApiDll); FreeLibrary(hHulDll); return 0; }