送信要求拡張API
送信要求または再送要求を発行するAPIです。
構文
INT __stdcall utlrecvex( LPCSTR lpszFileID , LPCSTR lpszHostName ,
BOOL bResend , BOOL bNp , BOOL bSync , INT nWait ,
HULMSGS* lpMsg , INT nTransMode , SHORT nPriority );
パラメーター説明
- LPCSTR lpszFileID(IN)
-
集信したいファイルIDを指定
50バイト以内の文字列で指定します。省略する場合は“NULL”を指定します。
- LPCSTR lpszHostName(IN)
-
送信を依頼する相手ホスト名を指定
68バイト以内の文字列で指定します。省略する場合は“NULL”を指定します。
再送要求時(bResend=TRUE)の場合、必ず指定しなければなりません。
- BOOL bResend(IN)
-
再送要求フラグを指定
- TRUE
-
: 再送要求を指定
- FALSE
-
: 送信要求を指定
- BOOL bNp(IN)
-
チェックポイントフラグを指定
送信要求(bResend=FALSE)の場合は、必ず“FALSE”を指定してください。
- TRUE
-
: ファイルの先頭から再送要求を行う
- FALSE
-
: チェックポイント再送要求を行う
- BOOL bSync(IN)
-
同期転送フラグを指定
再送要求(bResend=TRUE)の場合は、同期転送指定はできません。
- TRUE
-
: 同期転送する
- FALSE
-
: 同期転送しない
- INT nWait(IN)
-
同期転送時の待ち時間を指定(秒)
同期転送時に処理結果を受け取るために同期をとる時間を、“10”~“259200”の範囲で指定します。この時間に至ると、たとえ集信中であっても、処理を戻します。その場合、転送結果は戻りませんので注意してください。
同期転送指定の場合(bSync=TRUE)のみ有効となります。同期転送しない場合(bSync=FALSE)は“0”を指定します。
同期転送指定時に“0”を指定した場合、システム動作環境設定ファイルのソケットリードタイムアウトで設定された値を使用します。
- 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”を指定してください。
- SHORT nPriority(IN)
-
電話接続時の転送優先度を指定
固定で“0”を指定してください。
注意事項
「lpszFileID」と「lpszHostName」が、ともに“NULL”の場合は、全ホストに対する再送要求を行います。
戻り値
正常時は「0」です。エラー時のステータスはutlrecv.exeのエラーコードと同様です。
詳細は、以下を参照してください。
HULFT10 for Windows エラーコード・メッセージ : 送信要求コマンド(utlrecv.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 *LPUTLRECVEX)(
LPCSTR lpszFileID, LPCSTR lpszHostName, BOOL bResend,
BOOL bNp, BOOL bSync, INT nWait,
HULMSGS* lpMsg, INT nTransMode, SHORT nPriority);
int main()
{
CHAR szFileID[50+1];
CHAR szHostName[68+1];
BOOL bResend;
BOOL bNp;
BOOL bSync;
INT nWait;
HULMSGS sMsgInfo;
CHAR* msgbodyptr[6];
CHAR msgbody[(50+1)*6];
INT nTransMode;
SHORT nPriority;
INT i;
HMODULE hHulDll;
HMODULE hApiDll;
LPUTLRECVEX lpUtlrecvex;
INT nStatus;
strcpy_s(szFileID, sizeof(szFileID), "TEST0001");
strcpy_s(szHostName, sizeof(szHostName), "host0001");
bResend = FALSE;
bNp = FALSE;
bSync = TRUE;
nWait = 300;
nTransMode = 0;
nPriority = 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, "host0001");
strcpy_s(sMsgInfo.msginfo[1], 51, "");
strcpy_s(sMsgInfo.msginfo[2], 51, "");
strcpy_s(sMsgInfo.msginfo[3], 51, "");
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;
}
lpUtlrecvex = (LPUTLRECVEX)GetProcAddress(hApiDll, "utlrecvex");
if (lpUtlrecvex == NULL)
{
printf("Unable to retrieves the address of HULFT API."
"(Error code=%lu)\n", GetLastError());
FreeLibrary(hApiDll);
FreeLibrary(hHulDll);
return 3;
}
nStatus = lpUtlrecvex(szFileID, szHostName, bResend, bNp, bSync,
nWait, &sMsgInfo, nTransMode, nPriority);
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 *LPUTLRECVEX)(
LPCSTR lpszFileID, LPCSTR lpszHostName, BOOL bResend,
BOOL bNp, BOOL bSync, INT nWait,
HULMSGS* lpMsg, INT nTransMode, SHORT nPriority);
int main()
{
CHAR szFileID[50+1];
CHAR szHostName[68+1];
BOOL bResend;
BOOL bNp;
BOOL bSync;
INT nWait;
HULMSGS sMsgInfo;
CHAR* msgbodyptr[6];
CHAR msgbody[(50+1)*6];
CHAR* exmsgbodyptr[2];
CHAR exmsgbody[(200+1)*2];
INT nTransMode;
SHORT nPriority;
INT i;
HMODULE hHulDll;
HMODULE hApiDll;
LPUTLRECVEX lpUtlrecvex;
INT nStatus;
strcpy_s(szFileID, sizeof(szFileID), "TEST0001");
strcpy_s(szHostName, sizeof(szHostName), "host0001");
bResend = FALSE;
bNp = FALSE;
bSync = TRUE;
nWait = 300;
nTransMode = 0;
nPriority = 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, "host0001");
strcpy_s(sMsgInfo.msginfo[1], 51, "");
strcpy_s(sMsgInfo.msginfo[2], 51, "");
strcpy_s(sMsgInfo.msginfo[3], 51, "");
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, "host0002");
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;
}
lpUtlrecvex = (LPUTLRECVEX)GetProcAddress(hApiDll, "utlrecvex");
if (lpUtlrecvex == NULL)
{
printf("Unable to retrieves the address of HULFT API."
"(Error code=%lu)\n", GetLastError());
FreeLibrary(hApiDll);
FreeLibrary(hHulDll);
return 3;
}
nStatus = lpUtlrecvex(szFileID, szHostName, bResend, bNp, bSync,
nWait, &sMsgInfo, nTransMode, nPriority);
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;
}