配信要求拡張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;
}