Option Explicit On 
Imports System.Runtime.InteropServices

Module WelHTCom



    '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
    '*
    '*		WelHTComm.dll	Module file for VB(V6.0)
    '*
    '*										WELCOM DESIGN K.K.
    '*
    '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/

    ' エラー番号/戻り値定義/受信コード判断用定義
    Public Const WelHTCODRecieve = &HFFF                        ' 正常受信判断用
    Public Const WelHTERRRecieve = &H8FFFF000                   ' エラー判断用

    Public Const WelHTNormalStatus = &H0                        ' 正常状態
    Public Const WelHTNotExecute = &H800                        ' 実行していない

    Public Const WelHTTXTRecieve = &H1                          ' 文字列受信
    Public Const WelHTACKRecieve = &H2                          ' ACK コード受信
    Public Const WelHTNAKRecieve = &H4                          ' NAK コード受信
    Public Const WelHTCANRecieve = &H8                          ' CAN コード受信
    Public Const WelHTBELRecieve = &H10                         ' BEL コード受信
    Public Const WelHTFULRecieve = &H20                         ' FUL コード受信
    Public Const WelHTENQRecieve = &H40                         ' ENQ コード受信
    Public Const WelHTFINRecieve = &H80                         ' 終了コード受信

    Public Const WelHTGeneralErr = &H800FF000                   ' 一般エラー判断用

    Public Const WelHTPortOpenErr = &H80001000                  ' ポート　オープンエラー
    Public Const WelHTTimeOutErr = &H80002000                   ' 受信タイムアウトエラー
    Public Const WelHTUserAbortReq = &H80004000                 ' ユーザーによる中断
    Public Const WelHTExceptionErr = &H80008000                 ' 例外　エラー
    Public Const WelHTProtocolErr = &H80010000                  ' プロトコルエラー

    Public Const WelHTPacketErr = &H80F00000                    ' パケット　エラー判断用

    Public Const WelHTPacketFmtErr = &H80100000                 ' パケット　フォーマットエラー
    Public Const WelHTPacketCrcErr = &H80200000                 ' パケット　CRCエラー
    Public Const WelHTPacketOthErr = &H80400000                 ' パケット　その他エラー

    Public Const WelHTFileErr = &H8F000000                      ' ファイルエラー判断用

    Public Const WelHTFileOpenErr = &H81000000                  ' ファイルオープンエラー
    Public Const WelHTFileWriteErr = &H82000000                 ' ファイル書き込みエラー
    Public Const WelHTFileReadErr = &H84000000                  ' ファイル読み込みエラー

    ' 自動実行定義
    Public Enum AutoStartENum
        HT_MANUAL = &H0                                         ' 自動実行しない
        HT_AUTOSTART = &H1                                      ' 自動開始
        HT_AUTOEND = &H2                                        ' 自動終了
    End Enum

    ' ファイルＲ／Ｗ定義
    Public Enum SettingIOEnum
        HT_SETFIO_DISABLE = &H0                                 ' 設定ファイルＲ／Ｗ　不許可
        HT_SETFIO_PUT = &H1                                     ' 設定ファイル書き出し
        HT_SETFIO_GET = &H2                                     ' 設定ファイル読み込み
    End Enum

    ' ハンディターミナル機種定義
    Public Enum HandyTermENum
        HT_MODEL8000 = &H1                                      ' Ｍｏｄｅｌ８０００
        HT_PHL1000 = &H2                                        ' ＰＨＬ１０００
        HT_PHL2600 = &H4                                        ' ＰＨＬ２６００
    End Enum

    ' ポート番号定義
    Public Enum PortNoENum
        HT_COM1 = &H1                                           ' ＣＯＭ１
        HT_COM2 = &H2                                           ' ＣＯＭ２
        HT_COM3 = &H4                                           ' ＣＯＭ３
        HT_COM4 = &H8                                           ' ＣＯＭ４
        HT_COM5 = &H10                                          ' ＣＯＭ５
        HT_COM6 = &H20                                          ' ＣＯＭ６
        HT_COM7 = &H40                                          ' ＣＯＭ７
        HT_COM8 = &H80                                          ' ＣＯＭ８
    End Enum

    ' ボーレート定義
    Public Enum BaudRaitENum
        HT_BAUD115200 = &H1                                     ' １１５．２Ｋ
        HT_BAUD38400 = &H2                                      ' ３８４００
    End Enum

    ' 接続方法定義
    Public Enum ConnectModeENum
        HT_RS232C = &H1                                         ' ＲＳ−２３２Ｃ
        HT_IR705 = &H2                                          ' ＩＲ−７０５
    End Enum

    ' データアップロード時送信コード定義
    Public Enum UploadStartCdENum
        HT_SENDVOL = &H1                                        ' ＶＯＬ送信により開始
        HT_SENDENQ = &H2                                        ' ＥＮＱ送信により開始
    End Enum

    ' ＣＲＣタイプ定義
    Public Enum CrcTypeENum
        HT_CRC1 = &H1                                           ' ＣＲＣタイプ１（全伝文計算）
        HT_CRC2 = &H2                                           ' ＣＲＣタイプ２（ヘッダ・ＩＤを除いて計算）
    End Enum

    ' プロトコルタイプ定義
    Public Enum ProtoTypeENum
        HT_PROTO_WONLY = &H1                                    ' 専用プロトコル
        HT_PROTO_SIMPLE = &H2                                   ' シンプルプロトコル（データ受信時、パケットなし）
    End Enum

    ' 送受信方向定義
    Public Enum DirectionEnum
        HT_UPLOAD = &H1                                         ' ＵＰＬＯＡＤ（ＨＴ->ＰＣ）
        HT_DOWNLOAD = &H2                                       ' ＤＯＷＮＬＯＡＤ（ＰＣ->ＨＴ）
    End Enum

    ' 送受信ファイルタイプ定義
    Public Enum FileTypeEnum
        HT_FT_PROGRAM = &H1                                     ' プログラムの送信
        HT_FT_MENU = &H2                                        ' メニューの送信
        HT_FT_CSV = &H10                                        ' データの送受信（ＣＳＶ形式）
        HT_FT_MDB = &H20                                        ' データの送受信（ＭＤＢ形式）
        HT_FT_XLS = &H40                                        ' データの送受信（ＸＬＳ形式）
    End Enum

    Public Const HT_FT_DATA = &HF0                              ' データファイルビット定義

    ' ファイル名指定タイプ
    Public Enum FolderFileEnum
        HT_FILENAME = &H1                                       ' ファイルを指定
        HT_FOLDERNAME = &H2                                     ' フォルダを指定
    End Enum

    ' 編集可／不可
    Public Enum EditPermEnum
        HT_EDIT_ENABLE = &H1                                    ' 編集可
        HT_EDIT_DISABLE = &H2                                   ' 編集不可
    End Enum

    ' 設定可能拡張子
    Public Enum FileExtENum
        HT_EXT_SYN = &H1                                        ' *.syn - Model8000 Program
        HT_EXT_HEX = &H2                                        ' *.hex - PHL1000/2600 Program
        HT_EXT_PDT = &H4                                        ' *.pdt - Menu file
        HT_EXT_CSV = &H10                                       ' *.csv - CSV Data
        HT_EXT_TXT = &H20                                       ' *.txt - TEXT Data
        HT_EXT_XLS = &H40                                       ' *.xls - XLS Data
        HT_EXT_MDB = &H80                                       ' *.mdv - MDV Data
        HT_EXT_SET = &H100                                      ' *.hst - WelHTCom Setting File
        HT_EXT_ETC = &H1000                                     ' *.*   - All Data
    End Enum

    ' タイトル有り／なし（ＣＳＶ用）
    Public Enum TitlePermEnum
        HT_WITHOUT_TITLE = &H1                                  ' タイトル行なし
        HT_WITH_TITLE = &H2                                     ' タイトル行あり
    End Enum

    ' 追加／上書き（ＣＳＶ用）
    Public Enum OpenModeEnum
        HT_CSVAPPEND = &H1                                      ' 追加書き込み
        HT_CSVOVERW = &H2                                       ' 上書き
    End Enum

    ' テキスト区切り文字（ＣＳＶ用）
    Public Enum TextSepEnum
        HT_CSVSEP_COMMA = &H1                                   ' カンマ（ , )
        HT_CSVSEP_TAB = &H2                                     ' タブ ( \t )
        HT_CSVSEP_SPC = &H4                                     ' スペース ( ' ' )
        HT_CSVSEP_SEMIC = &H8                                   ' セミコロン ( ; )
        HT_CSVSEP_NOEDIT = &H10                                 ' 変換を行わない
    End Enum

    ' 文字列引用符（ＣＳＶ用）
    Public Enum TextQuoteEnum
        HT_QUOTE_DOUBLE = &H1                                   ' double quote（ " )
        HT_QUOTE_SINGLE = &H2                                   ' single quote ( ' )
        HT_QUOTE_NOTHING = &H4                                  ' なし
    End Enum

    ' Excelのタイプ（Ｅｘｃｅｌ用）
    Public Enum XlsTypeEnum
        HT_XLS_2000 = &H1                                       ' Excel 97/2000 形式
        HT_XLS_95 = &H2                                         ' Excel 97 形式
    End Enum

    ' シート分割区分（Ｅｘｃｅｌ用）
    Public Enum SpSheetEnum
        HT_SP_DISABLE = &H1                                     ' シートに分けない
        HT_SP_ENABLE = &H2                                      ' シートに分ける
    End Enum

    ' シート選択方法（Ｅｘｃｅｌ用）
    Public Enum ShSelectEnum
        HT_SHEET_NO = &H1                                       ' シート番号
        HT_SHEET_NAME = &H2                                     ' シート名称
    End Enum

    ' ＭＤＢのタイプ（ＭＤＢ用）
    Public Enum MdbTypeEnum
        HT_MDB_2000 = &H1                                       ' Access2000形式
        HT_MDB_97 = &H2                                         ' Access97形式
    End Enum

    ' 名称使用区分
    Public Enum NameTypeEnum
        HT_DISPLAY = &H1                                        ' 表示にのみ使用
        HT_FIELDNAME = &H2                                      ' フィールド名として使用
    End Enum

    Public Const HT_DEFAULTSET = &H0                            ' 設定なし
    Public Const HT_PERMALL = &H7FFFFFFF                        ' すべて許可

    Public Const HT_BLANKITEM = 9999                            ' 空項目（編集項目設定）

    ' ユーザーインターフェース
    '     初期値の指定がない場合、システムのデフォルト値を使用する
    '     選択可能の指定がない場合、初期値と同じもののみ許可する

    Public Const HT_FILEPATH_LEN = 512                          ' ファイルパス領域サイズ
    Public Const HT_FILENAME_LEN = 32                           ' ファイル名領域サイズ
    Public Const HT_EDITTBL_MAX = 30                            ' 編集項目数
    Public Const HT_ITEMNAME_LEN = 32                           ' 項目名領域サイズ

    Public Const HT_BUFFSIZE = 256


    Public Structure WelHComSetTMPL
        Dim port As PortNoENum                                      ' ポート
        Dim baud As BaudRaitENum                                    ' ボーレート
        Dim mode As ConnectModeENum                                 ' 接続モード
        Dim sendcod As UploadStartCdENum                            ' データアップロード時送信コード
        Dim crctype As CrcTypeENum                                  ' ＣＲＣタイプ指定
        Dim protocol As ProtoTypeENum                               ' プロトコルタイプ
    End Structure

    <StructLayout(LayoutKind.Sequential)> _
    Public Structure WelHTComEditTMPL
        Dim nametype As NameTypeEnum                                ' 名称使用区分 初期値
        Dim nametype_perm As NameTypeEnum                           '              選択可能値
        ' 項目名
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname0() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname1() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname2() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname3() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname4() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname5() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname6() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname7() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname8() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname9() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname10() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname11() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname12() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname13() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname14() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname15() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname16() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname17() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname18() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname19() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname20() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname21() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname22() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname23() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname24() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname25() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname26() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname27() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname28() As Byte
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_ITEMNAME_LEN)> Dim itname29() As Byte

        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_FILEPATH_LEN)> _
        Dim out_itno() As Short                                     ' 出力順（入力項目の番号を指定）
    End Structure

    Public Structure WelHTCsvTMPL
        Dim withtitle As TitlePermEnum                              ' タイトル有無  初期値
        Dim withtitle_perm As TitlePermEnum                         '               選択可能値

        Dim openmode As OpenModeEnum                                ' 追加／上書き  初期値
        Dim openmode_perm As OpenModeEnum                           '               選択可能値

        Dim textsep As TextSepEnum                                  ' 区切り文字  初期値
        Dim textsep_perm As TextSepEnum                             '             選択可能値

        Dim textquote As TextQuoteEnum                              ' 引用符  初期値
        Dim textquote_perm As TextQuoteEnum                         '         選択可能値
    End Structure

    <StructLayout(LayoutKind.Sequential)> _
    Public Structure WelHTXlsTMPL
        Dim xls_type As XlsTypeEnum                                 ' エクセルファイル形式
        Dim xls_type_perm As XlsTypeEnum                            ' エクセルファイル形式

        Dim tmplatename_edit As EditPermEnum                        ' テンプレート名変更 可／不可
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_FILEPATH_LEN)> _
        Dim tmplatename() As Byte                               ' テンプレート名

        Dim spsheet As SpSheetEnum                                  ' シートに分割  初期値
        Dim spsheet_perm As SpSheetEnum                             '               選択可能値

        Dim shselect As ShSelectEnum                                ' シート選択方法  初期値
        Dim shselect_perm As ShSelectEnum                           '                 選択可能値

        Dim shselectitem As Integer                                    ' シート名に使用する項目番号

        Dim titlerow As Integer                                        ' タイトル行
        Dim startrow As Integer                                        ' 開始行
    End Structure

    <StructLayout(LayoutKind.Sequential)> _
    Public Structure WelHTMdbTMPL
        Dim mdb_type As MdbTypeEnum                                 ' データベース形式
        Dim mdb_type_perm As MdbTypeEnum                            ' データベース形式
        Dim tablename_edit As EditPermEnum                          ' テーブル名変更 可／不可

        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_FILENAME_LEN)> _
        Dim tablename() As Byte                                 ' テーブル名

        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=64)> _
        Dim uid() As Byte                                     ' ユーザーＩＤ
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=64)> _
        Dim pwd() As Byte                                     ' パスワード
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=64)> _
        Dim dsn() As Byte                                     ' ＤＳＮ（未使用）
    End Structure

    <StructLayout(LayoutKind.Sequential)> _
    Public Structure WelHTComTMPL
        ' 機種情報
        Dim httype As HandyTermENum                                 ' 機種  初期値
        Dim httype_perm As HandyTermENum                            '       選択可能値

        ' 通信設定
        Dim comset As WelHComSetTMPL                                ' 通信設定 初期値
        Dim comset_perm As WelHComSetTMPL                           '          選択可能値

        ' 送受信ファイル情報
        Dim direct As DirectionEnum                                 ' 送受信方向  初期値
        Dim direct_perm As DirectionEnum                            '             選択可能値

        Dim filetype As FileTypeEnum                                ' ファイル形式  初期値
        Dim filetype_perm As FileTypeEnum                           '               選択可能値

        Dim ht_fname_edit As EditPermEnum                           ' ハンディファイル名変更 許可
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_FILENAME_LEN)> _
        Dim ht_fname() As Byte                                      ' ハンディファイル名

        Dim filename_edit As EditPermEnum                           ' ファイル名変更 許可

        Dim foldfile As FolderFileEnum                              ' 指定方法（フォルダ／ファイル）  初期値
        Dim foldfile_perm As FolderFileEnum                         '                                 選択可能値

        Dim fileext_perm As FileExtENum                             ' ファイル名 指定可能張子
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=HT_FILEPATH_LEN)> _
        Dim filename() As Byte                                      ' フォルダ／ファイル名

        ' 項目編集
        Dim dataitem_edit As EditPermEnum                           ' 項目編集 変更許可

        Dim itemedit As EditPermEnum                                ' 項目編集する／しない  初期値
        Dim itemedit_perm As EditPermEnum                           '                       選択可能値

        Dim selcnt_edit As EditPermEnum                             ' 最大項目数 変更許可
        Dim selcnt As Integer                                          ' 入力項目数

        Dim edittbl As WelHTComEditTMPL                             ' 項目編集方法設定

        Dim csv As WelHTCsvTMPL                                     ' CSV     専用
        Dim xls As WelHTXlsTMPL                                     ' Excel   専用
        Dim mdb As WelHTMdbTMPL                                     ' Access  専用

        ' 実行制御
        Dim setting As SettingIOEnum                                ' 設定ファイルＲ／Ｗ
        Dim autorun As AutoStartENum                                ' 自動実行
    End Structure


    ' MoveMemory API
    'Public Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
    '        (ByVal Destination As Byte, ByRef Source As Byte, ByVal Length As Integer)

    '*****************************************************************************
    '
    ' 共通関数定義
    '
    ' *****************************************************************************

    '****************************************************************************
    ' 全通信制御
    '****************************************************************************

    ' WelHT通信制御
    Declare Function vbWelHTComFunc Lib "WelHTCom.dll" Alias "WelHTComFunc" _
                                                    (ByRef htsetp As WelHTComTMPL) As Integer

    ' 全許可設定
    Declare Sub vbWelHTComSetEnable Lib "WelHTCom.dll" Alias "WelHTComSetEnable" _
                                                    (ByRef htsetp As WelHTComTMPL)

    ' 全不許可設定
    Declare Sub vbWelHTComSetDisable Lib "WelHTCom.dll" Alias "WelHTComSetDisable" _
                                                    (ByRef htsetp As WelHTComTMPL)

    ' ファイルからの設定の読み込み
    Declare Sub WelHTComSettingGet Lib "WelHTCom.dll" _
                    (<MarshalAs(UnmanagedType.LPStr)> ByVal filename As String, _
                                                     ByRef htsetp As WelHTComTMPL)

    ' ファイルに設定を保存
    Declare Sub WelHTComSettingPut Lib "WelHTCom.dll" _
                    (<MarshalAs(UnmanagedType.LPStr)> ByVal filename As String, _
                                                     ByRef htsetp As WelHTComTMPL)


    '****************************************************************************
    ' ファイル自動送受信
    '****************************************************************************

    ' ハンディターミナルからデータをアップロードし、ＣＳＶ形式で保存する
    Declare Function WelHTUploadCsv Lib "WelHTCom.dll" _
                                                    (ByVal Prm_Fold As String, _
                                                     ByVal Prm_Fnam As String, _
                                                     ByRef Prm_Com As WelHComSetTMPL, _
                                                     ByRef Prm_Edit As WelHTComEditTMPL, _
                                                     ByRef Prm_Csv As WelHTCsvTMPL) As Integer

    ' ハンディターミナルからデータをアップロードし、ＸＬＳ形式で保存する
    Declare Function WelHTUploadXls Lib "WelHTCom.dll" _
                                                    (ByVal Prm_Fold As String, _
                                                     ByVal Prm_Fnam As String, _
                                                     ByRef Prm_Com As WelHComSetTMPL, _
                                                     ByRef Prm_Edit As WelHTComEditTMPL, _
                                                     ByRef Prm_Xls As WelHTXlsTMPL) As Integer

    ' ハンディターミナルからデータをアップロードし、ＭＤＢ形式で保存する
    Declare Function WelHTUploadMdb Lib "WelHTCom.dll" _
                                                    (ByVal Prm_Fold As String, _
                                                     ByVal Prm_Fnam As String, _
                                                     ByRef Prm_Com As WelHComSetTMPL, _
                                                     ByRef Prm_Edit As WelHTComEditTMPL, _
                                                     ByRef Prm_Mdb As WelHTMdbTMPL) As Integer

    ' ハンディターミナル(Model8000)にプログラムファイルをダウンロードする
    Declare Function WelHTDownloadProgSyn Lib "WelHTCom.dll" _
                                                    (ByVal Prm_HTFnam As String, _
                                                     ByVal Prm_Fold As String, _
                                                     ByVal Prm_Fnam As String, _
                                                     ByRef Prm_Com As WelHComSetTMPL) As Integer

    ' ハンディターミナル(PHL)にプログラムファイルをダウンロードする
    Declare Function WelHTDownloadProgHex Lib "WelHTCom.dll" _
                                                    (ByVal Prm_HTFnam As String, _
                                                     ByVal Prm_Fold As String, _
                                                     ByVal Prm_Fnam As String, _
                                                     ByRef Prm_Com As WelHComSetTMPL) As Integer

    ' ハンディターミナルにメニューファイルをダウンロードする
    Declare Function WelHTDownloadMenu Lib "WelHTCom.dll" _
                                                    (ByVal Prm_HTFnam As String, _
                                                    ByVal Prm_Fold As String, _
                                                    ByVal Prm_Fnam As String, _
                                                    ByRef Prm_Com As WelHComSetTMPL) As Integer

    ' ハンディターミナルにＣＳＶ形式ファイルのデータをダウンロードする
    Declare Function WelHTDownloadCsv Lib "WelHTCom.dll" _
                                                    (ByVal Prm_HTFnam As String, _
                                                     ByVal Prm_Fold As String, _
                                                     ByVal Prm_Fnam As String, _
                                                     ByRef Prm_Com As WelHComSetTMPL, _
                                                     ByRef Prm_Edit As WelHTComEditTMPL, _
                                                     ByRef Prm_Csv As WelHTCsvTMPL) As Integer

    ' ハンディターミナルにＸＬＳ形式ファイルのデータをダウンロードする
    Declare Function WelHTDownloadXls Lib "WelHTCom.dll" _
                                                    (ByVal Prm_HTFnam As String, _
                                                     ByVal Prm_Fold As String, _
                                                     ByVal Prm_Fnam As String, _
                                                     ByRef Prm_Com As WelHComSetTMPL, _
                                                     ByRef Prm_Edit As WelHTComEditTMPL, _
                                                     ByRef Prm_Xls As WelHTXlsTMPL) As Integer

    ' ハンディターミナルにＭＤＢ形式ファイルのデータをダウンロードする
    Declare Function WelHTDownloadMdb Lib "WelHTCom.dll" _
                                                    (ByVal Prm_HTFnam As String, _
                                                     ByVal Prm_Fold As String, _
                                                     ByVal Prm_Fnam As String, _
                                                     ByRef Prm_Com As WelHComSetTMPL, _
                                                     ByRef Prm_Edit As WelHTComEditTMPL, _
                                                     ByRef Prm_Mdb As WelHTMdbTMPL) As Integer

    ' ファイル送受信状態を得る
    Declare Function WelHTStatusGet Lib "WelHTCom.dll" _
                                                    (ByVal msg_p As String, _
                                                     ByRef errno_p As Integer, _
                                                     ByRef curno_p As Integer, _
                                                     ByRef allno_p As Integer) As Boolean

    ' 通信の中断指示
    Declare Sub vbWelHTCancelCom Lib "WelHTCom.dll" Alias "WelHTCancelCom" ()

    ' 送受信データログ開始
    Declare Sub WelHTDataLogStart Lib "WelHTCom.dll" (ByVal fname As String)

    ' 送受信データログ終了
    Declare Sub vbWelHTDataLogEnd Lib "WelHTCom.dll" Alias "WelHTDataLogEnd" ()


    '****************************************************************************
    ' 入出力
    '****************************************************************************

    ' 通信ポートオープン
    Declare Function vbWelHTPortOpen Lib "WelHTCom.dll" Alias "WelHTPortOpen" _
                                                    (ByRef comh_p As Integer, _
                                                     ByVal Prm_Port As PortNoENum, _
                                                     ByVal Prm_Baud As BaudRaitENum, _
                                                     ByVal Prm_Mode As ConnectModeENum, _
                                                     ByVal Prm_crc As CrcTypeENum) As Integer

    ' 通信ポートクローズ
    Declare Sub vbWelHTPortClose Lib "WelHTCom.dll" Alias "WelHTPortClose" _
                                                    (ByVal comh As Integer)

    ' 通信ポート受信バッファクリア
    Declare Sub vbWelHTPortClear Lib "WelHTCom.dll" Alias "WelHTPortClear" _
                                                    (ByVal comh As Integer)

    ' 伝文終了コード（CR)を付加して、データ送信（パケット編集なし）
    Declare Sub WelHTPutRawData Lib "WelHTCom.dll" _
                      (ByVal comh As Integer, ByVal SndStr As String)

    ' データ受信（伝文終了コード（CR)削除・パケットデコードなし）
    Declare Function WelHTGetRawData Lib "WelHTCom.dll" _
                         (ByVal comh As Integer, ByVal RcvStr As String) As Integer

    ' パケット編集後、送信
    Declare Sub WelHTPutTextData Lib "WelHTCom.dll" _
                    (ByVal comh As Integer, ByVal SndStr As String, ByVal Sep As Short)

    ' データ受信（伝文終了コード(CR)削除・パケットデコードあり）
    Declare Function WelHTGetTextData Lib "WelHTCom.dll" _
                         (ByVal comh As Integer, ByVal RcvStr As String, ByVal Sep As Short, _
                         ByVal TimeOutCnt As Short) As Integer

    ' データ送信　＆　データ受信（伝文終了コード(CR)削除・パケットデコードあり）待ち
    Declare Function WelHTPutRawData_Wait Lib "WelHTCom.dll" _
                         (ByVal comh As Integer, ByVal SndStr As String, _
                         ByVal Sep As Short, ByVal RcvStr As String, _
                         ByVal TimeOutCnt As Short, ByVal RetryCnt As Short, ByVal AcceptCode As Integer) As Integer

    ' パケット編集後、データ送信　＆　データ受信（伝文終了コード(CR)削除・パケットデコードあり）待ち
    Declare Function WelHTPutTextData_Wait Lib "WelHTCom.dll" _
                         (ByVal comh As Integer, ByVal SndStr As String, _
                         ByVal Sep As Integer, ByVal RcvStr As String, _
                         ByVal TimeOutCnt As Short, ByVal RetryCnt As Short, ByVal AcceptCode As Integer) As Integer

    ' 受信待ち　＆　自動リプライ
    Declare Function WelHTGetTextData_Retry Lib "WelHTCom.dll" _
                         (ByVal comh As Integer, ByVal RcvStr As String, ByVal Sep As Short, _
                         ByVal TimeOutCnt As Short, ByVal RetryCnt As Short, ByVal AcceptCode As Integer) As Integer


    '****************************************************************************
    ' 低水準入出力
    '****************************************************************************

    ' 通信ポートのオープン
    Declare Function vbWelOpenCom Lib "WelHTCom.dll" Alias "WelOpenCom" _
                         (ByVal nPort As Short, ByVal nBaud As Integer, ByVal mode As Short) As Integer

    ' 通信ポートのクローズ
    Declare Sub vbWelCloseCom Lib "WelHTCom.dll" Alias "WelCloseCom" _
                         (ByVal hcomm As Integer)

    ' 受信バッファのクリア
    Declare Sub vbWelClearCom Lib "WelHTCom.dll" Alias "WelClearCom" (ByVal hcomm As Integer)

    ' 通信ポートにデータを書き込む
    Declare Sub WelWriteCom Lib "WelHTCom.dll" _
                    (ByVal hcomm As Integer, ByVal lpStr As String)

    Declare Sub WelWriteComEx Lib "WelHTCom.dll" _
                    (ByVal hcomm As Integer, ByVal lpStr As String, ByVal nCount As Short)

    ' 通信ポートからデータを読み込む
    Declare Function WelReadCom Lib "WelHTCom.dll" _
                         (ByVal hcomm As Integer, ByVal lpStr As String, _
                         ByVal endlinecd As Short) As Integer

    '*****************************************************************************
    '
    ' VB専用インターフェース関数（文字列の変換を行う）
    '   出力パラメータ( VB  から DLL へ ）  vbNullCharを付加する
    '   入力パラメータ( DLL から VB  へ ）  必要なバッファサイズを確保して関数コール
    '                                     vbNullCharまでを取り出して返す
    '*****************************************************************************

    ' ファイルからの設定の読み込み
    Public Sub vbWelHTComSettingGet(ByVal filename As String, ByRef htsetp As WelHTComTMPL)
        WelHTComSettingGet(filename + vbNullChar, htsetp)
    End Sub

    ' ファイルに設定を保存
    Public Sub vbWelHTComSettingPut(ByVal filename As String, ByRef htsetp As WelHTComTMPL)
        WelHTComSettingPut(filename + vbNullChar, htsetp)
    End Sub

    ' ハンディターミナルからデータをアップロードし、ＣＳＶ形式で保存する
    Public Function vbWelHTUploadCsv(ByVal Prm_Fold As String, _
                                     ByVal Prm_Fnam As String, _
                                     ByRef Prm_Com As WelHComSetTMPL, _
                                     ByRef Prm_Edit As WelHTComEditTMPL, _
                                     ByRef Prm_Csv As WelHTCsvTMPL) As Integer
        vbWelHTUploadCsv = WelHTUploadCsv(Prm_Fold + vbNullChar, _
                                            Prm_Fnam + vbNullChar, _
                                            Prm_Com, Prm_Edit, Prm_Csv)
    End Function

    ' ハンディターミナルからデータをアップロードし、ＸＬＳ形式で保存する
    Public Function vbWelHTUploadXls(ByVal Prm_Fold As String, _
                                     ByVal Prm_Fnam As String, _
                                     ByRef Prm_Com As WelHComSetTMPL, _
                                     ByRef Prm_Edit As WelHTComEditTMPL, _
                                     ByRef Prm_Xls As WelHTXlsTMPL) As Integer
        vbWelHTUploadXls = WelHTUploadXls(Prm_Fold + vbNullChar, _
                                            Prm_Fnam + vbNullChar, _
                                            Prm_Com, Prm_Edit, Prm_Xls)
    End Function

    ' ハンディターミナルからデータをアップロードし、ＭＤＢ形式で保存する
    Public Function vbWelHTUploadMdb(ByVal Prm_Fold As String, _
                                     ByVal Prm_Fnam As String, _
                                     ByRef Prm_Com As WelHComSetTMPL, _
                                     ByRef Prm_Edit As WelHTComEditTMPL, _
                                     ByRef Prm_Mdb As WelHTMdbTMPL) As Integer
        vbWelHTUploadMdb = WelHTUploadMdb(Prm_Fold + vbNullChar, _
                                            Prm_Fnam + vbNullChar, _
                                            Prm_Com, Prm_Edit, Prm_Mdb)
    End Function

    ' ハンディターミナル(Model8000)にプログラムファイルをダウンロードする
    Public Function vbWelHTDownloadProgSyn(ByVal Prm_HTFnam As String, _
                                           ByVal Prm_Fold As String, _
                                           ByVal Prm_Fnam As String, _
                                           ByRef Prm_Com As WelHComSetTMPL)
        vbWelHTDownloadProgSyn = WelHTDownloadProgSyn(Prm_HTFnam + vbNullChar, _
                                            Prm_Fold + vbNullChar, _
                                            Prm_Fnam + vbNullChar, _
                                            Prm_Com)
    End Function

    ' ハンディターミナル(PHL)にプログラムファイルをダウンロードする
    Public Function vbWelHTDownloadProgHex(ByVal Prm_HTFnam As String, _
                                           ByVal Prm_Fold As String, _
                                           ByVal Prm_Fnam As String, _
                                           ByRef Prm_Com As WelHComSetTMPL)
        vbWelHTDownloadProgHex = WelHTDownloadProgHex(Prm_HTFnam + vbNullChar, _
                                            Prm_Fold + vbNullChar, _
                                            Prm_Fnam + vbNullChar, _
                                            Prm_Com)
    End Function

    ' ハンディターミナルにメニューファイルをダウンロードする
    Public Function vbWelHTDownloadMenu(ByVal Prm_HTFnam As String, _
                                        ByVal Prm_Fold As String, _
                                        ByVal Prm_Fnam As String, _
                                        ByRef Prm_Com As WelHComSetTMPL)
        vbWelHTDownloadMenu = WelHTDownloadMenu(Prm_HTFnam + vbNullChar, _
                                            Prm_Fold + vbNullChar, _
                                            Prm_Fnam + vbNullChar, _
                                            Prm_Com)
    End Function

    ' ハンディターミナルにＣＳＶ形式ファイルのデータをダウンロードする
    Public Function vbWelHTDownloadCsv(ByVal Prm_HTFnam As String, _
                                       ByVal Prm_Fold As String, _
                                       ByVal Prm_Fnam As String, _
                                       ByRef Prm_Com As WelHComSetTMPL, _
                                       ByRef Prm_Edit As WelHTComEditTMPL, _
                                       ByRef Prm_Csv As WelHTCsvTMPL) As Integer
        vbWelHTDownloadCsv = WelHTDownloadCsv(Prm_HTFnam + vbNullChar, _
                                            Prm_Fold + vbNullChar, _
                                            Prm_Fnam + vbNullChar, _
                                            Prm_Com, Prm_Edit, Prm_Csv)
    End Function

    ' ハンディターミナルにＸＬＳ形式ファイルのデータをダウンロードする
    Public Function vbWelHTDownloadXls(ByVal Prm_HTFnam As String, _
                                       ByVal Prm_Fold As String, _
                                       ByVal Prm_Fnam As String, _
                                       ByRef Prm_Com As WelHComSetTMPL, _
                                       ByRef Prm_Edit As WelHTComEditTMPL, _
                                       ByRef Prm_Xls As WelHTXlsTMPL) As Integer
        vbWelHTDownloadXls = WelHTDownloadXls(Prm_HTFnam + vbNullChar, _
                                            Prm_Fold + vbNullChar, _
                                            Prm_Fnam + vbNullChar, _
                                            Prm_Com, Prm_Edit, Prm_Xls)
    End Function

    ' ハンディターミナルにＭＤＢ形式ファイルのデータをダウンロードする
    Public Function vbWelHTDownloadMdb(ByVal Prm_HTFnam As String, _
                                       ByVal Prm_Fold As String, _
                                       ByVal Prm_Fnam As String, _
                                       ByRef Prm_Com As WelHComSetTMPL, _
                                       ByRef Prm_Edit As WelHTComEditTMPL, _
                                       ByRef Prm_Mdb As WelHTMdbTMPL) As Integer
        vbWelHTDownloadMdb = WelHTDownloadMdb(Prm_HTFnam + vbNullChar, _
                                            Prm_Fold + vbNullChar, _
                                            Prm_Fnam + vbNullChar, _
                                            Prm_Com, Prm_Edit, Prm_Mdb)
    End Function

    ' ファイル送受信状態を得る
    Public Function vbWelHTStatusGet(ByRef msg_p As String, ByRef errno_p As Integer, _
                                     ByRef curno_p As Integer, ByRef allno_p As Integer) As Boolean
        msg_p = Space(HT_BUFFSIZE * 2)
        vbWelHTStatusGet = WelHTStatusGet(msg_p, errno_p, curno_p, allno_p)
        msg_p = vbWelHTStrGet(msg_p)
    End Function

    ' 送受信データログ開始
    Public Sub vbWelHTDataLogStart(ByVal fname As String)
        WelHTDataLogStart(fname + vbNullChar)
    End Sub


    ' 伝文終了コード（CR)を付加して、データ送信（パケット編集なし）
    Public Sub vbWelHTPutRawData(ByVal comh As Integer, ByVal SndStr As String)
        WelHTPutRawData(comh, SndStr + vbNullChar)
    End Sub


    ' データ受信（伝文終了コード（CR)削除・パケットデコードなし）
    Public Function vbWelHTGetRawData(ByVal comh As Integer, ByRef RcvStr As String) As Integer
        RcvStr = Space(HT_BUFFSIZE * 2)
        vbWelHTGetRawData = WelHTGetRawData(comh, RcvStr)
        RcvStr = vbWelHTStrGet(RcvStr)
    End Function

    ' パケット編集後、送信
    Public Sub vbWelHTPutTextData(ByVal comh As Integer, ByVal SndStr As String, ByVal Sep As Short)
        WelHTPutTextData(comh, SndStr + vbNullChar, Sep)
    End Sub

    ' データ受信（伝文終了コード(CR)削除・パケットデコードあり）
    Public Function vbWelHTGetTextData(ByVal comh As Integer, ByRef RcvStr As String, _
                                       ByVal Sep As Short, ByVal TimeOutCnt As Short) As Integer
        RcvStr = Space(HT_BUFFSIZE * 2)
        vbWelHTGetTextData = WelHTGetTextData(comh, RcvStr, Sep, TimeOutCnt)
        RcvStr = vbWelHTStrGet(RcvStr)
    End Function

    ' データ送信　＆　データ受信（伝文終了コード(CR)削除・パケットデコードあり）待ち
    Public Function vbWelHTPutRawData_Wait(ByVal comh As Integer, ByVal SndStr As String, _
                                           ByVal Sep As Short, ByRef RcvStr As String, _
                                           ByVal TimeOutCnt As Short, ByVal RetryCnt As Short, _
                                           ByVal AcceptCode As Integer) As Integer
        RcvStr = Space(HT_BUFFSIZE * 2)
        vbWelHTPutRawData_Wait = WelHTPutRawData_Wait(comh, SndStr + vbNullChar, Sep, RcvStr, TimeOutCnt, RetryCnt, AcceptCode)
        RcvStr = vbWelHTStrGet(RcvStr)
    End Function


    ' データ送信　＆　データ受信（伝文終了コード(CR)削除・パケットデコードあり）待ち
    Public Function vbWelHTPutTextData_Wait(ByVal comh As Integer, ByVal SndStr As String, _
                                            ByVal Sep As Short, ByRef RcvStr As String, _
                                            ByVal TimeOutCnt As Short, ByVal RetryCnt As Short, _
                                            ByVal AcceptCode As Integer) As Integer
        RcvStr = Space(HT_BUFFSIZE * 2)
        vbWelHTPutTextData_Wait = WelHTPutTextData_Wait(comh, SndStr + vbNullChar, Sep, RcvStr, TimeOutCnt, RetryCnt, AcceptCode)
        RcvStr = vbWelHTStrGet(RcvStr)
    End Function

    ' 受信待ち　＆　自動リプライ
    Public Function vbWelHTGetTextData_Retry(ByVal comh As Integer, ByRef RcvStr As String, _
                                             ByVal Sep As Short, _
                                             ByVal TimeOutCnt As Short, ByVal RetryCnt As Short, _
                                             ByVal AcceptCode As Integer) As Integer
        RcvStr = Space(HT_BUFFSIZE * 2)
        vbWelHTGetTextData_Retry = WelHTGetTextData_Retry(comh, RcvStr, Sep, TimeOutCnt, RetryCnt, AcceptCode)
        RcvStr = vbWelHTStrGet(RcvStr)
    End Function

    ' 通信ポートにデータを書き込む
    Public Sub vbWelWriteCom(ByVal hcomm As Integer, ByVal lpStr As String)
        WelWriteCom(hcomm, lpStr + vbNullChar)
    End Sub

    Public Sub vbWelWriteComEx(ByVal hcomm As Integer, ByVal lpStr As String, ByVal nCount As Short)
        WelWriteComEx(hcomm, lpStr + vbNullChar, nCount)
    End Sub

    ' 通信ポートからデータを読み込む
    Public Function vbWelReadCom(ByVal hcomm As Integer, ByRef lpStr As String, ByVal endlinecd As Short) As Short
        lpStr = Space(HT_BUFFSIZE * 2)
        vbWelReadCom = WelReadCom(hcomm, lpStr, endlinecd)
        lpStr = vbWelHTStrGet(lpStr)
    End Function

    '*****************************************************************************
    ' VB専用関数
    '*****************************************************************************
    ' NULLまでのデータ（有効データ）を取り出す
    Private Function vbWelHTStrGet(ByVal rcvbuff As String) As String
        Dim Leng As Short

        Leng = InStr(rcvbuff, vbNullChar)
        If Leng > 0 Then
            vbWelHTStrGet = Left(rcvbuff, Leng - 1)
        Else
            vbWelHTStrGet = ""
        End If

    End Function

    ' 構造体のメンバーにデータを設定（UnicodeからJISに変換＆NULLを付加）
    Public Sub vbWelHTStrMemberSet(ByRef ArrayTop() As Byte, ByVal SetStr As String, Optional ByVal BuffSize As Integer = HT_ITEMNAME_LEN)
        Dim Bs() As Byte
        Dim Leng As Integer
        Dim Idx As Integer

        Bs = System.Text.Encoding.GetEncoding("Shift_JIS").GetBytes(SetStr + vbNullChar)

        Leng = UBound(Bs)
        If Leng > BuffSize Then
            Bs(BuffSize - 1) = 0
            Leng = BuffSize - 1
        End If

        For Idx = 0 To Leng
            ArrayTop(Idx) = Bs(Idx)
        Next

    End Sub

    ' 構造体のメンバーからNULLまでのデータ（有効データ）を取り出す（JISからUnicodeに変換）
    Public Sub vbWelHTStrMemberGet(ByRef rcvbuff As String, ByVal ArrayTop() As Byte, Optional ByVal BuffSize As Integer = HT_ITEMNAME_LEN)
        Dim Leng As Short
        Dim Idx As Short

        rcvbuff = System.Text.Encoding.GetEncoding("Shift_JIS").GetString(ArrayTop)

        Leng = InStr(rcvbuff, vbNullChar)
        If Leng > 0 Then
            rcvbuff = Left(rcvbuff, Leng - 1)
        Else
            rcvbuff = ""
        End If
    End Sub

End Module
