/******************************************************************************
  Module: BWIN-CAPI.TXT
          All commands for PPLB in Dynamic Link Library for Windows
  Notices: Copyright (c) 1998-2013 ARGOX
******************************************************************************/
  目錄
===============================================================================
(01)B_Bar2d_Maxi()              => 印出一個 Maxi Code 2D Barcode。
(02)B_Bar2d_PDF417()            => 印出一個 PDF-417 2D Barcode。
(03)B_Bar2d_PDF417_N()          => 印出一個 PDF-417 2D Barcode。
(04)B_ClosePrn()                => 關閉 Printer 工作。
(05)B_CreatePrn()               => 開啟 Printer 工作。
(06)B_Del_Form()                => 刪除 Form (表格)。
(07)B_Del_Pcx()                 => 刪除 Pcx 圖檔。
(08)B_Draw_Box()                => 畫一個框。
(09)B_Draw_Line()               => 畫一條線。
(10)B_Error_Reporting()         => 開啟或關閉錯誤回傳功能。
(11)B_Get_DLL_Version()         => 取得或秀出此函數庫版本資訊。
(12)B_Get_DLL_VersionA()        => 取得或秀出此函數庫版本資訊。
(13)B_Get_Graphic_ColorBMP()    => 轉換 BMP 圖檔彩色變灰階，並將圖形儲存在印表機內的 RAM。
(14)B_Get_Pcx()                 => 列印一個圖形並將圖形儲存在印表機內的 Memory。
(15)B_Initial_Setting()         => 前置處理。
(16)B_Load_Pcx()                => 列印一個圖形。
(17)B_Open_ChineseFont()        => 開啟使用中文點矩陣字型檔案 (16*15 和 24*24)。
(18)B_Print_Form()              => 列印一個 FORM (表格)，並輸入 FORM 所有變數、計數資料。
(19)B_Print_MCopy()             => 列印所有資料和加上跳號複製功能。
(20)B_Print_Out()               => 列印所有資料。
(21)B_Prn_Barcode()             => 印出一個條碼和加上跳號功能。
(22)B_Prn_Configuration()       => 列印印表機內部配置。
(23)B_Prn_Text()                => 印出一行文字和加上跳號功能。
(24)B_Prn_Text_Chinese()        => 印出一行文字，使用中文點矩陣字型檔案 (16*15 或 24*24)。
(25)B_Prn_Text_TrueType()       => 印出一行 True Type Font 文字。
(26)B_Prn_Text_TrueType_W()     => 印出一行 True Type Font 文字，並控制字型的寬及高。
(27)B_Select_Option()           => 設定轉印模式、啟動 Cutter 或 Peel。
(28)B_Select_Option2()          => 設定轉印模式、啟動 Cutter 或 Peel。
(29)B_Select_Symbol()           => 符號設定選擇。
(30)B_Select_Symbol2()          => 符號設定選擇。
(31)B_Set_Backfeed()            => 啟動 Back feed。
(32)B_Set_BMPSave()             => 儲存影像圖檔。
(33)B_Set_Darkness()            => 設定熱感頭列印熱度。
(34)B_Set_DebugDialog()         => 設定除錯環境。
(35)B_Set_Direction()           => 設定列印方向。
(36)B_Set_Form()                => 儲存並列印 FORM (表格)。
(37)B_Set_Labgap()              => 同時設定標籤長度及 GAP 長度。
(38)B_Set_Labwidth()            => 設定標籤寬度。
(39)B_Set_Originpoint()         => 設定開始列印點。
(40)B_Set_Prncomport()          => 設定 Serial Port。
(41)B_Set_Prncomport_PC()       => 設定 PC 序列埠。
(42)B_Set_Speed()               => 設定列印速度。
(43)B_Set_ProcessDlg()          => 開啟或關閉進度對話框
(44)B_GetUSBBufferLen()         => 查詢 USB 埠資料長度
(45)B_EnumUSB()                 => 取得 USB 埠的資料
(46)B_CreateUSBPort()           => 使用 USB 埠進行傳輸
(47)B_ResetPrinter()            => 使印表機重新開機
(48)B_GetPrinterResponse()      => 讀取印表機錯誤代碼
(49)B_TFeedMode()               => T Feed模式切換
(50)B_TFeedTest()               => T Feed模式紙張測試
(51)B_CreatePort()              => 開啟傳輸埠進行傳輸
(52)B_Execute_Form()            => 列印一個已存在列表機內的 FORM (表格)，並輸入 FORM 所有變數、計數資料。
(53)B_Bar2d_QR()                => 列印 QR 條碼 
(54)B_GetNetPrinterBufferLen()  => 查詢 Net Printer的資料長度。
(55)B_EnumNetPrinter()          => 取得 Net Printer的資料。
(56)B_CreateNetPort()           => 使用 Net 埠進行傳輸。
(57)B_Prn_Text_TrueType_Uni()   => 印出一行由Unicode編碼文字所轉成的 True Type Font 文字。
(58)B_Prn_Text_TrueType_UniB()  => 印出一行由Unicode編碼文字所轉成的 True Type Font 文字。  
(59)B_GetUSBDeviceInfo()        => 取得 USB 埠的裝置名稱和裝置路徑。
(60)B_Get_Graphic_ColorBMPEx()  => 轉換 BMP 圖檔彩色變灰階，並將圖形儲存在印表機內的 RAM。
(61)B_Get_Graphic_ColorBMP_HBitmap() => 轉換 BMP 圖檔彩色變灰階，並將圖形儲存在印表機內的 RAM。
(62)B_WriteData()               => 用來立即將資料傳送出或暫時寫入暫存區中。
(63)B_ReadData()                => 取得印表機中的資料。
(64)B_Set_EncryptionKey()       => 設定加密鑰匙的值。
(65)B_Check_EncryptionKey()     => 確認加密鑰匙的正確性。
(66)B_Set_ErrorDlg()            => 開啟或關閉重試詢問視窗。
(67)B_Bar2d_DataMatrix()        => 列印 Data Matrix 條碼。
(68)B_Set_Backfeed_Offset()     => 設定 Back Feed 偏移量(只用於撕紙模式).
(69)B_Set_CutPeel_Offset()      => 設定裁切或剝紙偏移量(只用於裁切/剝紙模式).

*******************************************************************************
  注意事項
===============================================================================
1.你應該將DLL檔案放置在哪兒?
  若使用32位元的DLL:
  A.將DLL檔案和應用程式放在同一目錄下.(這是最好的方法)
  B.在Windows 32位元作業系統中, 將DLL檔案放置在\Windows\System32目錄.
  C.在Windows 64位元作業系統中, 將DLL檔案放置在\Windows\Syswow64目錄.
  若使用64位元的DLL:
  A.將DLL檔案和應用程式放在同一目錄下.(這是最好的方法)
  B.在Windows 32位元作業系統中, 無法使用 64位元的DLL.
  C.在Windows 64位元作業系統中, 將DLL檔案放置在\Windows\Syswow32目錄.
2.以下範例為 Visual C++ 及 Visual Basic 的範例,其他程式語言不一定完全相同。

*******************************************************************************
B_GetUSBBufferLen()
B_EnumUSB()
===============================================================================
功能： 取得 USB Printer 的裝置名稱及資料長度。

語法：
  VC:
    int B_GetUSBBufferLen(void);
    int B_EnumUSB(char *buf);
  VB: VBA:
    Declare Function B_GetUSBBufferLen() As Long
    Declare Function B_EnumUSB(ByVal buf As String) As Long
  VB:
    Declare Function B_GetUSBBufferLen() As Integer
    Declare Function B_EnumUSB(ByVal buf As Byte()) As Integer

參數：
    buf;
      儲存 USB Printer 資料。

傳回值：
    B_GetUSBBufferLen();  傳回 USB Printer的資料長度。
    B_EnumUSB() 0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    char *pbuf;
    int nLen = B_GetUSBBufferLen() + 1;
    if (nLen > 1) {
      pbuf = (char *)new char[nLen];
      B_EnumUSB(pbuf);
    }
  VB: VBA:
    Dim nLen As Long
    Dim pbuf As String
    nLen = B_GetUSBBufferLen() + 1
    If nLen > 1 Then
      pbuf = Space(128)
      Call B_EnumUSB(pbuf)
    End If
  VB.net:
    Dim nLen As Integer
    Dim pbuf(128) As Byte
    nLen = B_GetUSBBufferLen() + 1
    If nLen > 1 Then
      Call B_EnumUSB(pbuf)
    End If

說明： 這兩個函數是一組的函數。先用 B_GetUSBBufferLen() 取得 USB 傳輸埠的資料
    長度, 然後再配記憶體給 B_EnumUSB() 儲存 USB 埠的資料。USB 埠的資料是以
    ("0x0d0x0a")做分隔,舉例來說, 如果資料是 A-200(0x0d)(0x0a)R-400ZIP的話表示 
    USB1 是接 A-200, USB2 是接 R-400Zip。

*******************************************************************************
B_GetUSBDeviceInfo()
===============================================================================
功能： 取得 USB Printer的裝置名稱和裝置路徑。

語法：
  VC:
    int B_GetUSBDeviceInfo(int nPort, char *pDeviceName, int *pDeviceNameLen, 
      char *pDevicePath, int *pDevicePathLen);
  VB: VBA:
    Declare Function B_GetUSBDeviceInfo(ByVal nPort As Long, _
      ByVal pDeviceName As String, ByRef pDeviceNameLen As Long, _
      ByVal pDevicePath As String, ByRef pDevicePathLen As Long) As Long
  VB.net:
    Declare Function B_GetUSBDeviceInfo(ByVal nPort As Integer, _
      ByVal pDeviceName As Byte(), ByRef pDeviceNameLen As Integer, _
      ByVal pDevicePath As Byte(), ByRef pDevicePathLen As Integer) As Integer

參數：
    nPort;
      指定要取得資料的USB printer, 由1開始.
    pDeviceName;
      儲存USB printer的裝置名稱, 若輸入時為空指標, 則不填資料.
    pDeviceNameLen;
      呼叫函式時要填入pDeviceName暫存區的長度; 輸出時則會回傳裝置名稱的長度.
    pDevicePath;
      儲存USB printer的裝置路徑, 若輸入時為空指標, 則不填資料.
    pDevicePathLen;
      呼叫函式時要填入pDevicePath暫存區的長度; 輸出時則會回傳裝置路徑的長度.

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    char buf1[128]={0}, buf2[128]={0};
    int nLen1=128, nLen2=128, nlen;
    nlen = B_GetUSBBufferLen() + 1;
    if (nlen > 1) {
      B_GetUSBDeviceInfo(1, buf1, &nLen1, buf2, &nLen2);
      B_CreatePrn(12, buf2); //or B_CreatePort(6, 0, buf2);
    }
  VB: VBA:
    Dim buf1 As String
    Dim buf2 As String
    Dim nLen1, nLen2, nlen As Long

    nlen = B_GetUSBBufferLen() + 1
    If nlen > 1 Then
      nLen1 = 128
      nLen2 = 128
      buf1 = Space(nLen1)
      buf2 = Space(nLen2)
      Call B_GetUSBDeviceInfo(1, buf1, nLen1, buf2, nLen2)
      Call B_CreatePrn(12, buf2) 'or Call B_CreatePort(6, 0, buf2)
    End If
  VB.net:
    Dim buf1() As Byte
    Dim buf2() As Byte
    Dim nLen1, nLen2, nlen As Integer
    Dim encAscII = System.Text.Encoding.ASCII

    nlen = B_GetUSBBufferLen() + 1
    If nlen > 1 Then
      nLen1 = 128
      nLen2 = 128
      ReDim buf1(nLen1)
      ReDim buf2(nLen2)
      Call B_GetUSBDeviceInfo(1, buf1, nLen1, buf2, nLen2)
      Call B_CreatePrn(12, encAscII.GetString(buf2, 0, nLen2))
      'or Call B_CreatePort(6, 0, encAscII.GetString(buf2, 0, nLen2))
    End If

說明： 此函式先呼叫 B_GetUSBBufferLen() 取得 USB printer的資料長度, 然後再呼叫 
    B_GetUSBDeviceInfo() 取得 USB printer的相關資料。
    pDevicePath所儲存的資料是USB的裝置路徑, 可用在B_CreatePrn()及B_CreatePort()
    來開啟USB裝置。
    
*******************************************************************************
B_GetNetPrinterBufferLen()
B_EnumNetPrinter()
===============================================================================
功能： 取得 Net Printer 的裝置名稱及資料長度。

語法：
  VC:
    int B_GetNetPrinterBufferLen(void);
    int B_EnumNetPrinter(char *buf);
  VB: VBA:
    Declare Function B_GetNetPrinterBufferLen() As Long
    Declare Function B_EnumNetPrinter(ByVal buf As String) As Long
  VB.net:
    Declare Function B_GetNetPrinterBufferLen() As Integer
    Declare Function B_EnumNetPrinter(ByVal buf As Byte()) As Integer

參數：
    buf;
      儲存 Net Printer 資料。

傳回值：
    B_GetNetPrinterBufferLen();  傳回 Net Printer 的資料長度.
    B_EnumNetPrinter();  0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    char *pbuf;
    int nLen = B_GetNetPrinterBufferLen() + 1;
    if (nLen > 1) {
      pbuf = (char *)new char[nLen];
      B_EnumNetPrinter(pbuf);
    }
  VB: VBA:
    Dim nLen As Long
    Dim pbuf As String
    nLen = B_GetNetPrinterBufferLen() + 1
    If nLen > 1 Then
      pbuf = Space(128)
      Call B_EnumNetPrinter(pbuf)
    End If
  VB.net:
    Dim nLen As Integer
    Dim pbuf(128) As Byte
    nLen = B_GetNetPrinterBufferLen() + 1
    If nLen > 1 Then
      Call B_EnumNetPrinter(pbuf)
    End If

說明： 這兩個函數是一組的函數。先用 B_GetNetPrinterBufferLen() 取得 Net Printer
    的資料長度, 然後再配記憶體給 B_EnumNetPrinter() 儲存 Net Printer 的資料。
    Net Printer 的資料是以("0x0d0x0a")做分隔,舉例來說, 如果資料是 
    NetPrinter:192.168.1.2(0x0d)(0x0a)NetPrinter:192.168.1.25 的話表示 
    NetPrinter1 是接 NetPrinter:192.168.1.2, 
    NetPrinter2 是接 NetPrinter:192.168.1.25。

*******************************************************************************
B_CreatePrn()
 ===============================================================================
功能： 開啟 Printer 工作。

語法：
  VC:
    int B_CreatePrn(int selection, LPCTSTR filename);
  VB: VBA:
    Declare Function B_CreatePrn(ByVal selection As Long, _
      ByVal filename As String) As Long
  VB:
    Declare Function B_CreatePrn(ByVal selection As Integer, _
      ByVal filename As String) As Integer

參數：
    selection;
      選擇輸出埠或檔案。
      0 -> print to file.
      1 -> lpt1, 2 -> lpt2, 3 -> lpt3
      4 -> com1, 5 -> com2, 6 -> com3
      10 -> pipe, 11 -> USBXXX, 12 -> USB
      13 -> LAN Client(TCP/IP)
    filename;
      當 selection 是 0 時，資料則輸出至檔案，filename 為檔案名稱，可含路徑。
      當 selection 是 10 時，filename 為輸出路徑或機碼(裝置路徑)。
      當 selection 是 11 時，filename 指的是想開啟的USB之index, index由1開始;
      當 selection 是 12 時，filename 指的是想開啟的USB機碼(裝置路徑), 
      和nPort = 10的使用方法一樣
      當 selection 內容是 13 時, filename 指的是想開啟的IP Address, 使用TCP/IP去開啟; 
      預設的port值為9100, 若要指定port值, 如80, 則在IPAddress後加上字串":80".

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_CreatePrn(1, NULL); or B_CreatePrn(0, "C:\\out.prn");
    B_CreatePrn(10,"\\\\allen\\Label");  //share mode.
  VB: VBA: VB.net:
    Call B_CreatePrn(1, null) or Call B_CreatePrn(0, "C:\\out.prn")
    Call B_CreatePrn(10, "\\\\allen\\Label")

說明： B_CreatePrn() 函數會開啟你選擇的輸出埠或開啟你鍵入的輸出檔。
    而這個函數必須在所有函數之前執行。
    B_CreatePrn(), B_CreateUSBPort() , B_CreateNetPort() 和 B_CreatePort() 不能同時使用。

*******************************************************************************
B_CreatePort()
===============================================================================
功能： 開啟 Printer 工作。

語法：
  VC:
    int B_CreatePort(int nPortType, int nPort, LPCTSTR filename);
  VB: VBA:
    Declare Function B_CreatePort(ByVal nPortType As Long, ByVal nPort As Long, _
      ByVal filename As String) As Long
  VB.net:
    Declare Function B_CreatePort(ByVal nPortType As Integer, ByVal nPort As Integer, _
      ByVal filename As String) As Integer

參數：
    nPortType;
      選擇輸出埠種類。
      0 -> 檔案
      1 -> Serial port
      2 -> Parallel prot
      4 -> USB port
      5 -> LAN port
      6 -> USB port
    nPort;
      選擇輸出埠編號。
      當 nPortType 為 1 時, 1 -> com1, 2 -> com2,.....
    filename;
      當 nPortType 為 0 時，資料則輸出至檔案，filename 為檔案名稱，可含路徑。
      當 nPortType 為 4 時，filename 指的是想開啟的USB的index, index由1開始.
      當 nPortType 為 5 時，filename 指的是想開啟的IP Address, 使用TCP/IP, 
      port 9100去開啟.
      當 nPortType 為 6 時，filename 指的是想開啟的USB的裝置路徑.

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_CreatePort(1, 1, NULL)
    B_CreatePort(0, 0, "C:\\out.prn");
    B_CreatePort(5, 0, "192.168.1.3");
  VB: VBA: VB.net:
    Call B_CreatePort(1, 1, null)
    Call B_CreatePort(0, 0, "C:\\out.prn")
    Call B_CreatePort(5, 0, "192.168.1.3")

說明：  B_CreatePort() 函數會開啟你選擇的輸出埠或開啟你鍵入的輸出檔。
    而這個函數必須在所有函數之前執行。
    B_CreatePrn(), B_CreateUSBPort(), B_CreateNetPort() 和 B_CreatePort() 不能同時使用。

*******************************************************************************
B_CreateUSBPort()
B_CreateNetPort()
 ===============================================================================
功能： 開啟 Printer 工作。
       使用 B_CreateUSBPort() 前需先呼叫 B_GetUSBBufferLen(), 
       這是為了和 B_EnumUSB() 及 B_GetUSBDeviceInfo() 同步。
       使用 B_CreateNetPort() 前需先呼叫 B_GetNetPrinterBufferLen(), 
       這是為了和 B_EnumNetPrinter() 同步。

語法：
  VC:
    int B_CreateUSBPort(int nPort);
    int B_CreateNetPort(int nPort);
  VB: VBA:
    Declare Function B_CreateUSBPort(ByVal nPort As Long) As Long
    Declare Function B_CreateNetPort(ByVal nPort As Long) As Long
  VB:
    Declare Function B_CreateUSBPort(ByVal nPort As Integer) As Integer
    Declare Function B_CreateNetPort(ByVal nPort As Integer) As Integer

參數：
    nPort;
      USB 傳輸埠 ; LAN 傳輸埠, nPort由1開始.

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    int nLen;
    nLen = B_GetUSBBufferLen();
    if (nLen) {
      B_CreateUSBPort(1);
    }
    nLen = B_GetNetPrinterBufferLen();
    if (nLen) {
      B_CreateNetPort(1);
    }
  VB: VBA: VB.net:
    Dim nLen As Long
    nLen = B_GetUSBBufferLen()
    If nLen Then
      Call B_CreateUSBPort(1)
    End If
    nLen = B_GetNetPrinterBufferLen()
    If nLen Then
      Call B_CreateNetPort(1)
    End If

說明： B_CreateUSBPort() 和 B_CreateNetPort()函數會開啟你選擇的輸出埠或
    開啟你鍵入的輸出檔。而這個函數必須在所有函數之前執行。
    B_CreatePrn(), B_CreateUSBPort() , B_CreateNetPort() 和 B_CreatePort() 不能同時使用。

*******************************************************************************
B_ClosePrn()
===============================================================================
功能：  關閉 Printer 工作。

語法：
  VC:
    void B_ClosePrn(void);
  VB: VBA: VB.net:
    Declare Sub B_ClosePrn()

範例：
  VC:
    B_ClosePrn();
  VB: VBA: VB.net:
    Call B_ClosePrn()
  
說明：  這個 B_ClosePrn 函數會關閉執行過的記憶體及你選擇的輸出埠或關閉你開啟的
    輸出檔。而這個函數必須在所有函數之後執行。
  
*******************************************************************************
B_Bar2d_Maxi()
===============================================================================
功能：  印出一個 Maxi Code 2D Barcode。

語法：
  VC:
    int B_Bar2d_Maxi(int x, int y, int cl, int cc, int pc, LPCTSTR data);
  VB: VBA:
    Declare Function B_Bar2d_Maxi(ByVal x As Long, ByVal y As Long, ByVal cl As Long, _
      ByVal cc As Long, ByVal pc As Long, ByVal data As String) As Long
  VB.net:
    Declare Function B_Bar2d_Maxi(ByVal x As Integer, ByVal y As Integer, _
      ByVal cl As Integer, ByVal cc As Integer, ByVal pc As Integer, _
      ByVal data As String) As Integer

參數：
    x;
      X 座標。
    y;
      Y 座標。
    cl;
      A 3-位數 Class code。
    cc;
      A 3-位數 Country code。
    pc;
      在美國 Post code 是一個4或5-位數，其他國家是 6 位數。
    data;
      資料字串，最多84個字元。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Bar2d_Maxi(50, 50, 300, 400, 93065, "This MaxiCode");
  VB: VBA: VB.net:
    Call B_Bar2d_Maxi(50, 50, 300, 400, 93065, "This MaxiCode")

說明：  這個 B_Bar2d_Maxi 函數可以列印出一個 Maxi Code 2D Barcode。

*******************************************************************************
B_Bar2d_PDF417()
===============================================================================
功能：  印出一個 PDF-417 2D Barcode。

語法：
  VC:
    int B_Bar2d_PDF417(int x, int y, int w, int v, int s, int c, int px, int py, 
      int r, int l, int t, int o, LPCTSTR data);
  VB: VBA:
    Declare Function B_Bar2d_PDF417(ByVal x As Long, ByVal y As Long, ByVal w As Long, _
      ByVal v As Long, ByVal s As Long, ByVal c As Long, ByVal px As Long, _
      ByVal py As Long, ByVal r As Long, ByVal l As Long, ByVal t As Long, _
      ByVal o As Long, ByVal data As String) As Long
  VB.net:
    Declare Function B_Bar2d_PDF417(ByVal x As Integer, ByVal y As Integer, _
      ByVal w As Integer, ByVal v As Integer, ByVal s As Integer, ByVal c As Integer, _
      ByVal px As Integer, ByVal py As Integer, ByVal r As Integer, ByVal l As Integer, _
      ByVal t As Integer, ByVal o As Integer, ByVal data As String) As Integer

參數：
    x;
      X 座標。
    y;
      Y 座標。(1 dot = 0.125 mm)
    w;
      最大列印寬度，單位 dots。
    v;
      最大列印高度，單位 dots。
    s;
      錯誤校正等級，範圍：0～8。
    c;
      資料壓縮等級，範圍：0 或 1。
    px;
      模組寬度，範圍：2～9 dots。
    py;
      模組高度，範圍：4～99 dots。
    r;
      最大 row count。
    l;
      最大 column count。
    t;
      Truncation flag，'0' 是 normal 和 '1' 是 truncated.
    o;
      列印方向定位，'0'是 0°，'1'是90°、'2'是180°，'3'是270°
    data;
      資料字串。

傳回值：
    0    -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Bar2d_PDF417(10, 10, 400, 300, 0, 0, 3, 7, 10, 2, 0, 0, "ARGOXINFO");
  VB: VBA: VB.net:
    Call B_Bar2d_PDF417(10, 10, 400, 300, 0, 0, 3, 7, 10, 2, 0, 0, "ARGOXINFO")

說明：  這個 B_Bar2d_PDF417 函數可以列印出一個 PDF-417 2D Barcode。

*******************************************************************************
B_Bar2d_DataMatrix()
===============================================================================
功能：  印出一個 Data Matrix code。

語法：
  VC:
    int B_Bar2d_DataMatrix(int x, int y, int r, int l, int h, int v, LPCTSTR data);
  VB: VBA:
    Declare Function B_Bar2d_DataMatrix(ByVal x As Long, ByVal y As Long, ByVal r As Long, _
      ByVal l As Long, ByVal h As Long, ByVal v As Long, ByVal data As String) As Long
  VB.net:
    Declare Function B_Bar2d_DataMatrix(ByVal x As Integer, ByVal y As Integer, _
      ByVal r As Integer, ByVal l As Integer, ByVal h As Integer, _
      ByVal v As Integer, ByVal data As String) As Integer

參數：
    x;
      X 座標。
    y;
      Y 座標。
    r;
      row count(範圍：9～49, 必須為偶數值; 0為自動)。
    l;
      column count(範圍：9～49, 必須為偶數值; 0為自動)。
    h;
      模組高度，範圍：1～40 dots。
    v;
      反轉條碼的影像。0 -> FALSE、1 -> TRUE。
    data;
      資料字串。

傳回值：
    0    -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Bar2d_DataMatrix(10, 10, 0, 0, 5, 0, "DataMatrix");
  VB: VBA: VB.net:
    Call B_Bar2d_DataMatrix(10, 10, 0, 0, 5, 0, "DataMatrix")

說明：  這個 B_Bar2d_DataMatrix 函數可以列印出一個 Data Matrix code。

*******************************************************************************
B_Del_Form()
===============================================================================
功能：  刪除 Form (表格)。

語法：
  VC:
    int B_Del_Form(char formname[10]);
  VB: VBA:
    Declare Function B_Del_Form(ByVal formname As String) As Long
  VB.net:
    Declare Function B_Del_Form(ByVal formname As String) As Integer

參數：
    formname;
      表格名稱，最多 9 個字。
      當 formname 內容是 '*'時將會清除印表機內所有表格。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Del_Form("demo");
  VB: VBA: VB.net:
    Call B_Del_Form("demo")

說明：  這個 B_Del_Form 函數會刪除印表機內，你輸入的 Form (表格)名稱。當
    你刪除它後，將不能再還原，但可以重新載入。

*******************************************************************************
B_Del_Pcx()
===============================================================================
功能：  刪除儲存於RAM或Flash中的圖形。

語法：
  VC:
    int B_Del_Pcx(char pcxname[10]);
  VB: VBA:
    Declare Function B_Del_Pcx(ByVal pcxname As String) As Long
  VB.net:
    Declare Function B_Del_Pcx(ByVal pcxname As String) As Integer

參數：
    pcxname;
      圖形名稱，最多 9 個字。
      當 pcxname 內容是 '*'時將會清除印表機內 RAM 或 flash memory 所有圖形。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Del_Pcx("*");
  VB: VBA: VB.net:
    Call B_Del_Pcx("*")

說明：  這個 B_Del_Pcx 函數會刪除印表機內，你輸入的圖形名稱。當你刪除它後，
    將不能再還原，但可以重新載入。

*******************************************************************************
B_Draw_Box()
===============================================================================
功能：  畫一個框。

語法：
  VC:
    int B_Draw_Box(int x, int y, int thickness, int hor_dots, int ver_dots);
  VB: VBA:
    Declare Function B_Draw_Box(ByVal x As Long, ByVal y As Long, _
      ByVal thickness As Long, ByVal hor_dots As Long, ByVal ver_dots As Long) As Long
  VB.net:
    Declare Function B_Draw_Box(ByVal x As Integer, ByVal y As Integer, _
      ByVal thickness As Integer, ByVal hor_dots As Integer, _
      ByVal ver_dots As Integer) As Integer

參數：
    x;
      起點 X 座標。
    y;
      起點 Y 座標。(1 dot = 0.125 mm)
    thickness;
      指定框四邊邊線厚度。
    hor_dots; 
      對角點 X 座標。
    ver_dots;
      對角點 Y 座標。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Draw_Box(50, 120, 5, 250, 150);
  VB: VBA: VB.net:
    Call B_Draw_Box(50, 120, 5, 250, 150)

說明：  這個 B_Draw_Box 函數會畫一個屬性是 "OR" 的框。

*******************************************************************************
B_Draw_Line()
===============================================================================
功能：  畫一條線。

語法：
  VC:
    int B_Draw_Line(char mode, int x, int y, int hor_dots, int ver_dots);
  VB: VBA:
    Declare Function B_Draw_Line(ByVal mode As Byte, ByVal x As Long, ByVal y As Long, _
      ByVal hor_dots As Long, ByVal ver_dots As Long) As Long
  VB.net:
    Declare Function B_Draw_Line(ByVal mode As Byte, ByVal x As Integer, _
      ByVal y As Integer, ByVal hor_dots As Integer, ByVal ver_dots As Integer) As Integer

參數：
    mode;
      選擇線條種類，如下表：
      +------+----------------------------+
      | mode | 線條種類.                  |
      +------+----------------------------+
      |   E  | Exclusive OR               |
      +------+----------------------------+
      |   O  | OR                         |
      +------+----------------------------+
      |   W  | 白線，它會蓋掉先前影像     |
      +------+----------------------------+
    x;
      起點 X 座標。
    y;
      起點 Y 座標。(1 dot = 0.125 mm)
    width;
      水平長度。
    height;
      垂直長度。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Draw_Line('O', 50, 30, 100, 10);
  VB: VBA: VB.net:
    Call B_Draw_Line(Asc("O"), 50, 30, 100, 10)

說明：  這個 Draw_Line 函數會畫一個屬性是"OR"或"XOR"的線條及一條白線。

*******************************************************************************
B_Error_Reporting()
===============================================================================
功能：  開啟或關閉錯誤回傳功能。

語法：
  VC:
    int B_Error_Reporting(char option);
  VB: VBA:
    Declare Function B_Error_Reporting(ByVal options As Byte) As Long
  VB.net:
    Declare Function B_Error_Reporting(ByVal options As Byte) As Integer

參數：
    option;
      當 option 是'N'時 Disable 狀態回饋。
      'S' 是 Enable 狀態回饋。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Error_Reporting('S');
  VB: VBA: VB.net:
    Call B_Error_Reporting(Asc("S"))

說明：  這個 B_Error_Reporting 函數會使印表機狀態回饋 Disable/Enable，這回
    饋通道是透過 RS232 Port。預定值是 Disable。

*******************************************************************************
B_Get_DLL_Version()
B_Get_DLL_VersionA()
===============================================================================
功能：  取得或秀出此函數庫版本資訊。

語法：
  VC:
    char* B_Get_DLL_Version(int nShowMessage);
    int B_Get_DLL_VersionA(int nShowMessage);
  VB: VBA:
    Declare Function B_Get_DLL_Version(ByVal nShowMessage As Long) As Long
    Declare Function B_Get_DLL_VersionA(ByVal nShowMessage As Long) As Long
  VB.net:
    Declare Function B_Get_DLL_Version(ByVal nShowMessage As Integer) As String
    Declare Function B_Get_DLL_VersionA(ByVal nShowMessage As Integer) As Integer

參數：
    nShowMessage;
      0 -> 訊息視窗不顯現。
      1 -> 訊息視窗顯現。

傳回值：
    B_Get_DLL_Version();  傳回版本資訊字串，失敗則傳回 NULL。
    B_Get_DLL_VersionA();  return version value.
                           主版號 = (return version value) / 100.
                           子版號 = (return version value) % 100.

範例：
  VC:
    int nVersion, nMainVersion, nSubVersion;
    nVersion = B_Get_DLL_VersionA(1);
    nMainVersion = nVersion / 100;
    nSubVersion = nVersion % 100;
  VB: VBA:
    Dim nVersion, nMainVersion, nSubVersion As Long
    nVersion = B_Get_DLL_VersionA(1)
    nMainVersion = Int(nVersion / 100)
    nSubVersion = nVersion Mod 100
  VB.net:
    Dim nVersion, nMainVersion, nSubVersion As Integer
    nVersion = B_Get_DLL_VersionA(1)
    nMainVersion = nVersion / 100
    nSubVersion = nVersion Mod 100

說明：  這個 B_Get_DLL_Version 函數，讓使用者取得或秀出此函數庫版本資訊。
    由於 B_Get_DLL_Version() 是回傳字串, 在 VB 和 VBA 的開發上, 需要使用 
    RtlMoveMemory() 去轉換然後才能取得, 此函式在使用上有技術上的難度, 
    因此 VB 和 VBA 的開發建議不要使用此函式, 請改用 B_Get_DLL_VersionA(), 
    若一定要使用 B_Get_DLL_Version(), 請參考 MSDN.
    
*******************************************************************************
B_Get_Graphic_ColorBMP()
B_Get_Graphic_ColorBMPEx()
B_Get_Graphic_ColorBMP_HBitmap()
===============================================================================
功能：  將 BMP 圖檔轉換成灰階模式，並將圖形儲存在印表機內的 RAM。

語法：
  VC:
    int B_Get_Graphic_ColorBMP(int x, int y, LPCTSTR filename);
    int B_Get_Graphic_ColorBMPEx(int x, int y, int nWidth, int nHeight,
      int rotate, LPCTSTR id_name, LPCTSTR filename);
    int B_Get_Graphic_ColorBMP_HBitmap(int x, int y, int nWidth, int nHeight,
      int rotate, LPCTSTR id_name, HBITMAP hbm);    
  VB: VBA:
    Declare Function B_Get_Graphic_ColorBMP(ByVal x As Long, ByVal y As Long, _
      ByVal filename As String) As Long
    Declare Function B_Get_Graphic_ColorBMPEx(ByVal x As Long, _
      ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, _
      ByVal rotate As Long, ByVal id_name As String, ByVal filename As String) As Long
    Declare Function B_Get_Graphic_ColorBMP_HBitmap(ByVal x As Long, _
      ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, _
      ByVal rotate As Long, ByVal id_name As String, ByVal hbm As Long) As Long
  VB.net:
    Declare Function B_Get_Graphic_ColorBMP(ByVal x As Integer, ByVal y As Integer, _
      ByVal filename As String) As Integer
    Declare Function B_Get_Graphic_ColorBMPEx(ByVal x As Integer, _
      ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, _
      ByVal rotate As Integer, ByVal id_name As String, ByVal filename As String) As Integer
    Declare Function B_Get_Graphic_ColorBMP_HBitmap(ByVal x As Integer, _
      ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, _
      ByVal rotate As Integer, ByVal id_name As String, ByVal hbm As Integer) As Integer

參數：
    x;
      X 座標。
    y;
      Y 座標。
    nWidth;
      此參數表示原圖縮放後的圖形寬度，0表示使用原圖寬度。
    nHeight;
      此參數表示原圖縮放後的圖形高度，0表示使用原圖高度。
    rotate;
      此參數表示圖形縮放後旋轉的方向，'0'是 0°，'1'是90°、'2'是180°，'3'是270°。
    id_name;
      給予一個識別名稱存放於印表機內，以後直接使用 B_Load_Pcx() 即可將舊圖呼叫出來。
    filename;
      圖形檔名稱，可包含路徑。
      格式如：XXXXXXXX.XXX 或 X:\\XXX\\XXX.XXX
    hbm;
      GDI 的 HBITMAP HANDLE, 只支援 IMAGE_BITMAP 格式。
    
傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Get_Graphic_ColorBMP(30, 20, "bb.bmp");
    B_Get_Graphic_ColorBMPEx(30, 20, 200, 150, 2, "bb1", "bb.bmp");//180 angle.
    HANDLE himage = LoadImage(NULL,"bb.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    B_Get_Graphic_ColorBMP_HBitmap(30, 20, 250, 80, 1, "bb2", (HBITMAP)himage);//90 angle.      
  VB: VBA:
    Const IMAGE_BITMAP = 0
    Const LR_LOADFROMFILE = &H10
    Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, _
            ByVal lpsz As String, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, _
            ByVal un2 As Long) As Long
    Private Declare Function DeleteObject Lib "Gdi32" (ByVal ho As Long) As Long
    
    Call B_Get_Graphic_ColorBMP(30, 20, "bb.bmp")
    Call B_Get_Graphic_ColorBMPEx(30, 20, 200, 150, 2, "bb1", "bb.bmp") ' 180 angle.
    Dim himage As Long
    himage = LoadImage(0, "bb.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
    Call B_Get_Graphic_ColorBMP_HBitmap(30, 20, 250, 80, 1, "bb2", himage) ' 90 angle.
    If himage Then
        Call DeleteObject(himage)
    End If
  VB.net:
    Const IMAGE_BITMAP = 0
    Const LR_LOADFROMFILE = &H10
    Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Integer, _
            ByVal lpsz As String, ByVal un1 As Integer, ByVal n1 As Integer, ByVal n2 As Integer, _
            ByVal un2 As Integer) As Integer
  
    Call B_Get_Graphic_ColorBMP(30, 20, "bb.bmp")
    Call B_Get_Graphic_ColorBMPEx(30, 20, 200, 150, 2, "bb1", "bb.bmp") ' 180 angle.
    Dim himage As Integer
    himage = LoadImage(0, "bb.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
    Call B_Get_Graphic_ColorBMP_HBitmap(30, 20, 250, 80, 1, "bb2", himage) ' 90 angle. 

說明：  這個 B_Get_Graphic_ColorBMP() 函數可輸入任何位元數的 BMP 圖檔，並自動轉換
    為黑白灰階圖檔送至印表機列印。
    B_Get_Graphic_ColorBMPEx() 和 B_Get_Graphic_ColorBMP_HBitmap() 函式可做放大，
    縮小及旋轉的功能，分別可利用檔名及 GDI 的 HBITMAP HANDLE 當資料來源。

*******************************************************************************
B_Get_Pcx()
===============================================================================
功能：  列印一個圖形並將圖形儲存在印表機內的 Memory。

語法：
  VC:
    int B_Get_Pcx(int x, int y, LPCTSTR filename);
  VB: VBA:
    Declare Function B_Get_Pcx(ByVal x As Long, ByVal y As Long, _
      ByVal filename As String) As Integer
  VB.net:
    Declare Function B_Get_Pcx(ByVal x As Integer, ByVal y As Integer, _
      ByVal filename As String) As Integer

參數：
    x;
      X 座標。
    y;
      Y 座標。(1 dot = 0.125 mm)
    filename;
      圖形檔名稱，可含路徑。
      格式如：XXXXXXXX.XXX 或 X:\\XXX\\XXX.XXX

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Get_Pcx(10,100,"phone.pcx");
  VB: VBA: VB.net:
    Call B_Get_Pcx(50, 30, "phone.pcx")

說明：  這個 B_Get_Pcx 函數會列印一個圖形並將圖形儲存在印表機內的 RAM 或
    flash memory。圖形檔必須是 PCX 的格式。

*******************************************************************************
B_Initial_Setting()
===============================================================================
功能：  前置處理。

語法：
  VC:
    int B_Initial_Setting(int Type, LPCTSTR Source);
  VB:
    Declare Function B_Initial_Setting(ByVal Type As Long, _
      ByVal Source As String) As Long
  VB:
    Declare Function B_Initial_Setting(ByVal Type As Integer, _
      ByVal Source As String) As Integer

參數：
    Type;
      選擇輸入模式。
      0 -> 輸入字串，1 -> 輸入檔案。
    Source;
      資料來源，可為字串或檔案名稱，可含路徑。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    LPCTSTR aa = "ZT\r\n";
    B_Initial_Setting(0, aa);
      or
    B_Initial_Setting(1, "initfile.txt");
  VB: VBA: VB.net:
    Dim aa As String
    aa = "ZT" + Chr(13) + Chr(10)
    Call B_Initial_Setting(0, aa)
      or
    Call B_Initial_Setting(1, "initfile.txt")

說明：  這個 B_Initial_Setting 函數前置處理的動作，是將一串 Command 先送至印表
    機，由字串或檔案輸入，在使用這個函數時，須先在 B_Create_Prn() 之後其他
    函數之前，可作為使用者自訂型態。

*******************************************************************************
B_WriteData()
===============================================================================
功能：  用來立即將資料傳送出或暫時寫入暫存區中。

語法：
  VC:
    int B_WriteData(int IsImmediate, LPCTSTR pbuf, DWORD length);
  VB: VBA:
    Declare Function B_WriteData(ByVal IsImmediate As Long, _
      ByVal pbuf As String, ByVal length As Long) As Long  
  VB.net:
    Declare Function B_WriteData(ByVal IsImmediate As Integer, _
      ByVal pbuf As Byte(), ByVal length As ULong) As Integer

參數：
    IsImmediate;
      1為立即傳送, 只傳pbuf中的內容至輸出埠; 
      0為將資料加到暫存區後, 等呼叫B_Print_Out()時才傳送。
    pbuf;
      要傳送的資料指標。
    length;
      pbuf的資料長度。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    const char sznop1[] = "nop_front\r\n";
    const char sznop2[] = "nop_middle\r\n";
    B_WriteData(0, sznop2, (DWORD)strlen(sznop2));
    B_WriteData(1, sznop1, (DWORD)strlen(sznop1));
  VB: VBA:
    Dim sznop1 As String = "nop_front" + vbCrLf
    Dim sznop2 As String = "nop_middle" + vbCrLf
    Call B_WriteData(0, sznop2, Len(sznop2))
    Call B_WriteData(1, sznop1, Len(sznop1))  
  VB.net:
    Dim encAscII = System.Text.Encoding.ASCII
    Dim sznop1 As String = "nop_front" + vbCrLf
    Dim sznop2 As String = "nop_middle" + vbCrLf
    Call B_WriteData(0, encAscII.GetBytes(sznop2), sznop2.Length)
    Call B_WriteData(1, encAscII.GetBytes(sznop1), sznop1.Length)

說明：  此函式用來將使用者想要對印表機下達的控制指令或任何列印資料, 皆可利用此
    函式來完成。

*******************************************************************************
B_ReadData()
===============================================================================
功能：  取得印表機中的資料。

語法：
  VC:
    int B_ReadData(LPTSTR pbuf, DWORD length, DWORD dwTimeoutms);
  VB: VBA:
    Declare Function B_ReadData(ByVal pbuf As String, ByVal length As Long, _
      ByVal dwTimeoutms As Long) As Long
  VB.net:
    Declare Function B_ReadData(ByVal pbuf As Byte(), ByVal length As ULong, _
      ByVal dwTimeoutms As ULong) As Integer

參數：
    pbuf;
      要接收回傳資料的指標。如果它是空指標, 則不填資料。
    length;
      要讀取的資料大小。
    dwTimeoutms;
      計數時間, 也就是讀取資料最長的時間, 單位為ms。

傳回值：
    已讀取的資料大小。

範例：
  VC:
    int ret;
    char temp[10]={0};
    B_WriteData(1, "^ee\r\n", 5);//^ee
    ret = B_ReadData(temp, 4, 1000);//1 second.
  VB: VBA:
    Dim ret As Integer
    Dim temp As String
    temp = Space(10)
    temp = "^ee\r\n"
    B_WriteData(1, temp, 5)   '^ee
    ret = B_ReadData(pbuf, 4, 1000)   '1 second.
  VB.net:
    Dim ret As Integer
    Dim temp(10) As Byte
    B_WriteData(1, encAscII.GetBytes("^ee\r\n"), 5)   '^ee
    ret = B_ReadData(pbuf, 4, 1000)   '1 second.

說明：  此函式用來讀取印表機的回傳資料, 所以請注意使用的通訊埠是否有資料回傳的
    能力。請和B_WriteData() 函數配合使用, 並參考"Argox programmer's manual"。

*******************************************************************************
B_Load_Pcx()
===============================================================================
功能：  列印一個圖形。

語法：
  VC:
    int B_Load_Pcx(int x, int y, char pcxname[10]);
  VB: VBA:
    Declare Function B_Load_Pcx(ByVal x As Long, ByVal y As Long, _
      ByVal pcxname As String) As Long
  VB.net:
    Declare Function B_Load_Pcx(ByVal x As Integer, ByVal y As Integer, _
      ByVal pcxname As String) As Integer

參數：
    x;
      X 座標。
    y;
      Y 座標。備註：1 dot = 0.125 mm。
    pcxname;
      圖形檔名稱最大9個字元。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Load_Pcx(50, 30, "phone");
  VB: VBA: VB.net:
    Call B_Load_Pcx(50, 30, "phone")

說明：  這個 B_Load_Pcx 函數會列印一個 PCX 格式圖形，而圖形必須事先載入印表
    機內的 RAM 或 flash memory 儲存。

*******************************************************************************
B_Open_ChineseFont()
===============================================================================
功能：  開啟使用中文點矩陣字型檔案 (16*15 和 24*24)。

語法：
  VC:
    int B_Open_ChineseFont(char* path);
  VB: VBA:
    Declare Function B_Open_ChineseFont(ByVal path As String) As Long
  VB:
    Declare Function B_Open_ChineseFont(ByVal path As String) As Integer

參數：
    path;
      中文點矩陣字型檔案來源路徑。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Open_ChineseFont("C:\\ET3");
  VB: VBA: VB.net:
    Call B_Open_ChineseFont("C:\\ET3")

說明：  這個 B_Open_ChineseFont 函數開啟中文點矩陣字型檔案 (16*15 和 24*24)，
    供 B_Prn_Text_Chinese 函數使用。

*******************************************************************************
B_Print_Form()
===============================================================================
功能：  列印一個 FORM (表格)，並輸入 FORM 所有變數、計數資料。

語法：
  VC:
    int B_Print_Form(int labset, int copies, char form_out[10], LPTSTR var);
  VB: VBA:
    Declare Function B_Print_Form(ByVal labset As Long, ByVal copies As Long, _
      ByVal form_out As String, ByVal var As String) As Long
  VB.net:
    Declare Function B_Print_Form(ByVal labset As Integer, ByVal copies As Integer, _
      ByVal form_out As String, ByVal var As String) As Integer

參數：
    labset;
      列印的份數，範圍：1～32767。
    copies;
      複製的份數，範圍：1～32767。
    form_out;
      表格名稱，同於之前載入的 FORM 名稱，或原先儲存在印表機內的 FORM。
    var;
      輸入 FORM 所有變數、計數資料，用 ","依序分別區隔開。如果變數裡有","號，
      可用";,"來代表逗號。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Print_form(3, 2, "demo", "2000,Bicycle");
  VB: VBA: VB.net:
    Call B_Print_form(3, 2, "demo", "2000,Bicycle")

說明：  這個 B_Print_Form 函數會送所有資料及表格到 Printer，這個函數使用前
    須先執行 B_Set_Form()，並在所有函數之後，B_ClosePrn() 之前執行。當使
    用此函數時，就不須執行 B_Print_Out()。

*******************************************************************************
B_Print_MCopy()
===============================================================================
功能：  列印所有資料和加上跳號複製功能。

語法：
  VC:
    int B_Print_MCopy(int labset, int copies);
  VB: VBA:
    Declare Function B_Print_MCopy(ByVal labset As Long, _
      ByVal copies As Long) As Long
  VB.net:
    Declare Function B_Print_MCopy(ByVal labset As Integer, _
      ByVal copies As Integer) As Integer

參數：
    labset;
      列印的份數，1 ~ 32767。
    copies;
      複製的份數，1 ~ 32767。
      當為 1 時同等於Print_Out()功能。

傳回值：
    0-> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Print_MCopy(2, 2);
  VB: VBA: VB.net:
    Call B_Print_MCopy(2, 2)

說明：  這個 B_Print_MCopy 函數會送所有資料到 Printer，這個函數須在所有函數之後，
    B_ClosePrn() 之前執行，當使用此函數時，就不須執行 B_Print_Out()。
    它包含 B_Print_Out() 所有功能。

*******************************************************************************
B_Print_Out()
===============================================================================
功能：  列印所有資料。

語法：
  VC:
    int B_Print_Out(int labset);
  VB: VBA:
    Declare Function B_Print_Out(ByVal labset As Long) As Long
  VB.net:
    Declare Function B_Print_Out(ByVal labset As Integer) As Integer

參數：
    labset;
      列印的份數。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Print_Out(1);
  VB: VBA: VB.net:
    Call B_Print_Out(1)

說明：  這個 B_Print_Out 函數會送所有資料到 Printer，這個函數須在所有函數之後，
    B_ClosePrn() 之前執行。

*******************************************************************************
B_Prn_Barcode()
===============================================================================
功能：  印出一個條碼和加上跳號功能。

語法：
  VC:
    int B_Prn_Barcode(int x, int y, int ori, char type[4], int n, int w, int height,
      char human, LPCTSTR data);
  VB: VBA:
    Declare Function B_Prn_Barcode(ByVal x As Long, ByVal y As Long, ByVal ori As Long, _
      ByVal TType As String, ByVal narrow As Long, ByVal width As Long, _
      ByVal height As Long, ByVal human As Byte, ByVal data As String) As Long
  VB.net:
    Declare Function B_Prn_Barcode(ByVal x As Integer, ByVal y As Integer, _
      ByVal ori As Integer, ByVal TType As String, ByVal narrow As Integer, _
      ByVal width As Integer, ByVal height As Integer, ByVal human As Byte, _
      ByVal data As String) As Integer

參數：
    x;
      X 座標。
    y;
      Y 座標。
    ori;
      列印方向定位，'0'是 0°，'1'是90°、'2'是180°，'3'是270°
    type;
      條碼型式、如下表：
      +========================================================================+
      | type|          條碼總類           | type|           條碼總類           |
      +========================================================================+
      |  0  | Code 128 UCC (shipping cont-|  E80| EAN-8                        |  
      |     | ainer code)                 +-----+------------------------------+
      +-----+-----------------------------+  E82| EAN-8 2 digit add-on         |
      |  1  | Code 128 subset A,B and C   +-----+------------------------------+
      +-----+-----------------------------+  E85| EAN-8 5 digit add-on         |
      |  1E | UCC/EAN                     +-----+------------------------------+
      +-----+-----------------------------+  K  | Codabar                      |
      |  2  | Interleaved 2 of 5          +-----+------------------------------+
      +-----+-----------------------------+  P  | Postnet                      |
      |  2C | Interleaved 2 of 5 with che-+-----+------------------------------+
      |     | ck sum digit                |  UA0| UPC-A                        |
      +-----+-----------------------------+-----+------------------------------+
      |  2D | Interleaved 2 of 5 with hum-|  UA2| UPC-A 2 digit add-on         |
      |     | an readable check digit     +-----+------------------------------+
      +-----+-----------------------------+  UA5| UPC-A 5 digit add-on         |
      |  2G | German Postcode             +-----+------------------------------+
      +-----+-----------------------------+  UE0| UPC-E                        |
      |  2M | Matrix 2 of 5               +-----+------------------------------+
      +-----+-----------------------------+  UE2| UPC-E 2 digit add-on         |
      |  2U | UPC Interleaved 2 of 5      +-----+------------------------------+
      +-----+-----------------------------+  UE5| UPC-E 5 digit add-on         |
      |  3  | Code 3 of 9                 +-----+------------------------------+
      +-----+-----------------------------+  R14|RSS-14                        |
      |  3C | Code 3 of 9 with check sum  +-----+------------------------------+
      |     | digit                       |  RL |RSS Limited                   |
      +-----+-----------------------------+-----+------------------------------+
      |  9  | Code 93                     |  RS |RSS Stacked                   | 
      +-----+-----------------------------+-----+------------------------------+
      |  E30| EAN-13                      |  RT |RSS Truncated                 |
      +-----+-----------------------------+-----+------------------------------+
      |  E32| EAN-13 2 digit add-on       |  RSO|RSS Stacked Omnidirectiona    |
      +-----+-----------------------------+-----+------------------------------+
      |  E35| EAN-13 5 digit add-on       |  REX|RSS Expanded                  |
      +-----+-----------------------------+-----+------------------------------+
    n;
      NARROW bar 寬度在最小單位，
      若是RSS條碼，則此參數為條碼寬度的倍數，範圍為1~10，預設值為1。
    w;
      WIDE bar 寬度在最小單位，
      若是RSS條碼，則此參數為每列條碼可包含的最大資料區塊數量，只在使用RSS Expanded條碼時
      有效，在其它類型的RSS條碼中則為無效參數，範圍為2~22，預設值為22，且此值必需為偶數。
    height;
      條碼高度。
      RSS條碼的標準的最小高度限制:
      R14 -> 33 pixels
      RL  -> 10 pixels
      RS  -> 13 pixels
      RT  -> 13 pixels
      RSO -> 69 pixels
      REX -> 34 pixels
    human;
      當 human 是'N'時，則不列印文字，當 human 是'B'時，則列印可讀文字。
    data;
      資料字串，於資料末端加上<Operation Number>，則可有跳號功能，
      Operation: + or - 記號，Number: 0 ~ 32768 數值。
      若在RSS需要加上2D(composite symbol)的資料時, 需加上'|'符號, 如1234567890123|123.
      RSS條碼的最大數值限制:
      R14 -> 9999999999999
      RL  -> 1999999999999
      RS  -> 9999999999999
      RT  -> 9999999999999
      RSO -> 9999999999999
      REX -> 74 digits

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Prn_Barcode(650, 15, 0, "E80", 2, 2, 51, 'B', "1234567"); // no counter
      or
    B_Prn_Barcode(650, 15, 0, "E80", 2, 2, 51, 'B', "1234567<+10>");//have a counter
      or 
    B_Prn_Barcode(650, 15, 0, "R14", 2, 0, 33, 'B', "1234567890123|R14"); DataBar + CS
  VB: VBA: VB.net:
    Call B_Prn_Barcode(650, 15, 0, "E80", 2, 2, 51, Asc("B"), "1234567") 
      'no counter
      or
    Call B_Prn_Barcode(650, 15, 0, "E80", 2, 2, 51, Asc("B"), "1234567<+10>") 
      'have a counter
      or 
    Call B_Prn_Barcode(650, 15, 0, "R14", 2, 0, 33, Asc("B"), "1234567890123|R14") 
      'DataBar + CS

說明：  這個 B_Prn_Barcode 函數可以列印出一個特定 Barcode 和加上跳號功能。

*******************************************************************************
B_Prn_Configuration()
===============================================================================
功能：  列印印表機內部配置。

語法：
  VC:
    void B_Prn_Configuration(void);
  VB: VBA: VB.net:
    Declare Sub B_Prn_Configuration()

範例：
  VC:
    B_Prn_Configuration();
  VB: VBA: VB.net:
    Call B_Prn_Configuration()

說明：  這個 B_Prn_Configuration 函數會列印印表機內部配置，包含設定、
    firmware 版本、accessories、等....。

*******************************************************************************
B_Prn_Text()
===============================================================================
功能：  印出一行文字和加上跳號功能。

語法：
  VC:
    int B_Prn_Text(int x, int y, int ori, int font, int hor_factor, int ver_factor,
      char mode, LPCTSTR data);
  VB: VBA:
    Declare Function B_Prn_Text(ByVal x As Long, ByVal y As Long, ByVal ori As Long, _
      ByVal font As Long, ByVal hor_factor As Long, ByVal ver_factor As Long, _
      ByVal mode As Byte, ByVal data As String) As Long
  VB.net:
    Declare Function B_Prn_Text(ByVal x As Integer, ByVal y As Integer, _
      ByVal ori As Integer, ByVal font As Integer, ByVal hor_factor As Integer, _
      ByVal ver_factor As Integer, ByVal mode As Byte, ByVal data As String) As Integer

參數：
    x;
      X 座標。
    y;
      Y 座標。
    ori;
      列印方向定位，'0'是 0°，'1'是90°、'2'是180°，'3'是270°
    font;
      選擇字形，1～5 選擇常佇字形。
    hor_factor;
      水平放大比例，範圍：1～24。
    ver_factor;
      垂直放大比例，範圍：1～24。
    mode;
      反白功能，'N'普通文字，'R'反白文字。
    data;
      資料字串，當尾端資料加上 <Operation Number> 格式為加上跳號功能，
      Operation: + or - 記號，Number: 0 ~ 32768 數值。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Prn_Text(50, 110, 0, 4, 1, 1, 'N', "A123456"); //無跳號功能
      or
    B_Prn_Text(50, 110, 0, 4, 1, 1, 'N', "A123456<-1>"); //有跳號功能
  VB: VBA; VB.net:
    B_Prn_Text(50, 110, 0, 4, 1, 1, Asc("N"), "A123456") 'no counter
      or
    B_Prn_Text(50, 110, 0, 4, 1, 1, Asc("N"), "A123456<-1>") 'have a counter

說明：  這個 B_Prn_Text 函數可以列印出一行文字和加上跳號功能。

*******************************************************************************
B_Prn_Text_Chinese()
===============================================================================
功能：  印出一行文字，使用中文點矩陣字型檔案 (16*15 或 24*24)。

語法：
  VC:
    int B_Prn_Text_Chinese(int x, int y, int fonttype, LPCTSTR id_name, LPCTSTR data);
  VB: VBA:
    Declare Function B_Prn_Text_Chinese(ByVal x As Long, ByVal y As Long, _
      ByVal fonttype As Long, ByVal id_name As String, ByVal data As String) As Long
  VB.net:
    Declare Function B_Prn_Text_Chinese(ByVal x As Integer, ByVal y As Integer, _
      ByVal fonttype As Integer, ByVal id_name As String, ByVal data As String) As Integer

參數：
    x;
      X 座標。(dot)
    y;
      Y 座標。(dot)
    fonttype;
      矩陣字型選擇。0 -> 16*15、1 -> 24*24。
    id_name;
      給予一個識別名稱存放於印表機內，以後直接使用 B_Load_Pcx() 即可將舊圖呼叫出來。
    data;
      文字內容。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Open_ChineseFont("C:\\ET3");
    B_Prn_Text_Chinese(100, 100, 0, "A01", "國家利益當前ＡｂＣｃＤｄ");
  VB: VBA; VB.net:
    Call B_Open_ChineseFont("C:\\ET3")
    Call B_Prn_Text_Chinese(100, 100, 0, "A01", "國家利益當前ＡｂＣｃＤｄ")

說明：  這個 B_Prn_Text_Chinese 函數可以印出一行文字，使用中文點矩陣字型檔案
    (16*15 或 24*24)。

*******************************************************************************
B_Prn_Text_TrueType()
B_Prn_Text_TrueType_W()
B_Prn_Text_TrueType_Uni()
B_Prn_Text_TrueType_UniB()
===============================================================================
功能：  印出一行 True Type Font 文字。

語法：
  VC:
    int B_Prn_Text_TrueType(int x, int y, int FSize, LPCTSTR FType, int Fspin,
      int FWeight, int FItalic, int FUnline, int FStrikeOut, LPCTSTR id_name,
      LPCTSTR data);
    int B_Prn_Text_TrueType_W(int x, int y, int FHeight, int FWidth, LPCTSTR FType,
      int Fspin, int FWeight, int FItalic, int FUnline, int FStrikeOut, LPCTSTR id_name,
      LPCTSTR data);
    int B_Prn_Text_TrueType_Uni(int x, int y, int FSize, LPCTSTR FType, int Fspin,
      int FWeight, int FItalic, int FUnline, int FStrikeOut, LPCTSTR id_name, 
      LPCWSTR data, int format);
    int B_Prn_Text_TrueType_UniB(int x, int y, int FSize, LPCTSTR FType, int Fspin,
      int FWeight, int FItalic, int FUnline, int FStrikeOut, LPCTSTR id_name, 
      LPCTSTR data, int format);
  VB: VBA:
    Declare Function B_Prn_Text_TrueType(ByVal x As Long, ByVal y As Long, _
      ByVal FSize As Long, ByVal FType As String, ByVal Fspin As Long, _
      ByVal FWeight As Long, ByVal FItalic As Long, ByVal FUnline As Long, _
      ByVal FStrikeOut As Long, ByVal id_name As String, ByVal data As String) As Long
    Declare Function B_Prn_Text_TrueType_W(ByVal x As Long, ByVal y As Long, _
      ByVal FHeight As Long, ByVal FWidth As Long, ByVal FType As String, _
      ByVal Fspin As Long, ByVal FWeight As Long, ByVal FItalic As Long, _
      ByVal FUnline As Long, ByVal FStrikeOut As Long, ByVal id_name As String, _
      ByVal data As String) As Long
    Declare Function B_Prn_Text_TrueType_Uni(ByVal x As Long, ByVal y As Long, _
      ByVal FSize As Long, ByVal FType As String, ByVal Fspin As Long, _
      ByVal FWeight As Long, ByVal FItalic As Long, ByVal FUnline As Long, _
      ByVal FStrikeOut As Long, ByVal id_name As String, ByRef data As Byte, _
      ByVal format As Long) As Long
    Declare Function B_Prn_Text_TrueType_UniB(ByVal x As Long, ByVal y As Long, _
      ByVal FSize As Long, ByVal FType As String, ByVal Fspin As Long, _
      ByVal FWeight As Long, ByVal FItalic As Long, ByVal FUnline As Long, _
      ByVal FStrikeOut As Long, ByVal id_name As String, ByRef data As Byte, _
      ByVal format As Long) As Long
  VB.net:
    Declare Function B_Prn_Text_TrueType(ByVal x As Integer, ByVal y As Integer, _
      ByVal FSize As Integer, ByVal FType As String, ByVal Fspin As Integer, _
      ByVal FWeight As Integer, ByVal FItalic As Integer, ByVal FUnline As Integer, _
      ByVal FStrikeOut As Integer, ByVal id_name As String, _
      ByVal data As String) As Integer
    Declare Function B_Prn_Text_TrueType_W(ByVal x As Integer, ByVal y As Integer, _
      ByVal FHeight As Integer, ByVal FWidth As Integer, ByVal FType As String, _
      ByVal Fspin As Integer, ByVal FWeight As Integer, ByVal FItalic As Integer, _
      ByVal FUnline As Integer, ByVal FStrikeOut As Integer, ByVal id_name As String, _
      ByVal data As String) As Integer
    Declare Function B_Prn_Text_TrueType_Uni(ByVal x As Integer, ByVal y As Integer, _
      ByVal FSize As Integer, ByVal FType As String, ByVal Fspin As Integer, _
      ByVal FWeight As Integer, ByVal FItalic As Integer, ByVal FUnline As Integer, _
      ByVal FStrikeOut As Integer, ByVal id_name As String, ByVal data As Byte(), _
      ByVal format As Integer) As Integer
    Declare Function B_Prn_Text_TrueType_UniB(ByVal x As Integer, ByVal y As Integer, _
      ByVal FSize As Integer, ByVal FType As String, ByVal Fspin As Integer, _
      ByVal FWeight As Integer, ByVal FItalic As Integer, ByVal FUnline As Integer, _
      ByVal FStrikeOut As Integer, ByVal id_name As String, ByVal data As Byte(), _
      ByVal format As Integer) As Integer

參數：
    x;
      X 座標, 單位: 像素。
    y;
      Y 座標, 單位: 像素。
    FSize;
      TrueType font size，單位為點(dot)。
    FHeight;
      字型高度，單位為點(dot)。
    FWidth;
      字型寬度，單位為點(dot)。
      FSize / FHeight / FWidth = (dpi * point) / 72.
    FType;
      TrueType font 字型名稱。
    Fspin;
      TrueType font 字體旋轉。1 -> 0, 2 -> 90, 3 -> 180, 4 -> 270
    FWeight;
      TrueType font 字體粗細。
      0 and NULL and 400 -> 400 標準、
      100 -> 非常細、200 -> 極細、
      300 -> 細    、500 -> 中等、
      600 -> 半粗  、700 -> 粗  、
      800 -> 特粗  、900 -> 黑體。
    FItalic;
      TrueType font 字體斜體。0 -> FALSE、1 -> TRUE。
    FUnline;
      TrueType font 字體加底線。0 -> FALSE、1 -> TRUE。
    FStrikeOut;
      TrueType font 字體加刪除線。0 -> FALSE、1 -> TRUE。
    id_name;
      給予一個識別名稱存放於印表機內，以後直接使用 B_Load_Pcx() 即可將舊圖呼叫出來。
    data;
      文字內容。
      B_Prn_Text_TrueType_Uni()與B_Prn_Text_TrueType_UniB()所輸入的data格式為UTF-8、
      UTF-16或Unicode big endian之字串，且需為0結尾。
    format;
      決定Unicode data的解碼方式。
      0 -> 由字串開頭的BOM(Byte Order Mark)決定。
      1 -> UTF-16。
      2 -> Unicode big endian。
      3 -> UTF-8。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    char *pbuf = new char[128];
    B_Prn_Text_TrueType(30, 100, 30, "Arial", 1, 400, 0, 0, 0, "AA", "TrueType Font");
      //save in printer.
    B_Prn_Text_TrueType_W(30, 160, 20, 20, "Times New Roman", 1, 400, 0, 0, 0, "AB", 
      "TT_W: 多字元測試");
    B_Prn_Text_TrueType_Uni(30, 220, 30, "Times New Roman", 1, 400, 0, 0, 0, "AC",
      L"TT_Uni: 多字元測試",1);//UTF-16
    strcpy(pbuf, "\xFF\xFE");//UTF-16.
    memcpy(&pbuf[2], (char *)L"TT_UniB: 多字元測試", 15*2);//copy mutil byte.
    B_Prn_Text_TrueType_UniB(30, 280, 30, "Times New Roman", 1, 400, 0, 0, 0, "AD",
      pbuf, 0);//Byte Order Mark.
  VB:
    Dim buff1(128) As Byte
    Dim buff2() As Byte
    Dim i As Long
    Call B_Prn_Text_TrueType(30, 100, 30, "Arial", 1, 400, 0, 0, 0, "AA", _
      "TrueType Font") 'save in printer.
    Call B_Prn_Text_TrueType_W(30, 160, 20, 20, "Times New Roman", 1, 400, 0, 0, 0, _
      "AB", "TT_W: 多字元測試")
    buff2 = StrConv("TT_Uni: 多字元測試", vbNarrow) 
      'Converts UNICODE(wide characters) to single-byte characters.
    For i = LBound(buff2) To UBound(buff2)
        buff1(i) = buff2(i)
    Next i
    buff1(26) = 0 'null.
    buff1(27) = 0
    Call B_Prn_Text_TrueType_Uni(30, 220, 30, "Times New Roman", 1, 400, 0, 0, 0, _
      "AC", buff1(0), 1) 'UTF-16
    buff1(0) = 255 'UTF-16.
    buff1(1) = 254
    buff2 = StrConv("TT_UniB: 多字元測試", vbNarrow) 
      'Converts UNICODE(wide characters) to single-byte characters.
    For i = LBound(buff2) To UBound(buff2)
        buff1(i + 2) = buff2(i)
    Next i
    buff1(30) = 0 'null.
    buff1(31) = 0
    Call B_Prn_Text_TrueType_UniB(30, 280, 30, "Times New Roman", 1, 400, 0, 0, 0, _
      "AD", buff1(0), 0) 'Byte Order Mark.
  VB.net:
    Dim pbuf(128) As Byte
    Dim encUnicode = System.Text.Encoding.Unicode
    Call B_Prn_Text_TrueType(30, 100, 30, "Arial", 1, 400, 0, 0, 0, "AA", "TrueType Font")
      'save in printer.
    Call B_Prn_Text_TrueType_W(30, 160, 20, 20, "Times New Roman", 1, 400, 0, 0, 0, _
      "AB", "TT_W: 多字元測試")
    Call B_Prn_Text_TrueType_Uni(30, 220, 30, "Times New Roman", 1, 400, 0, 0, 0, _
      "AC", encUnicode.GetBytes("TT_Uni: 多字元測試"), 1) 'UTF-16
    pbuf(0) = 255 'UTF-16.
    pbuf(1) = 254
    encUnicode.GetBytes("TT_UniB: 多字元測試", 0, 14, pbuf, 2) 'copy mutil byte.
    pbuf(30) = 0 'null.
    pbuf(31) = 0
    Call B_Prn_Text_TrueType_UniB(30, 280, 30, "Times New Roman", 1, 400, 0, 0, 0, _
      "AD", pbuf, 0) 'Byte Order Mark.

說明：  這個 B_Prn_Text_TrueType() 函數可以印出一行 True Type Font 文字。

*******************************************************************************
B_Select_Option()
B_Select_Option2()
===============================================================================
功能：  設定轉印模式、啟動 Cutter 或 Peel。

語法：
  VC:
    int B_Select_Option(int object);
    int B_Select_Option2(int object, int p);
  VB: VBA:
    Declare Function B_Select_Option(ByVal object As Long) As Long
    Declare Function B_Select_Option2(ByVal object As Long, ByVal p As Long) As Long
  VB.net:
    Declare Function B_Select_Option(ByVal object As Integer) As Integer
    Declare Function B_Select_Option2(ByVal object As Integer, _
      ByVal p As Integer) As Integer

參數：
    object;
      印表機功能選項。
      1 -> 開啟熱轉，關閉 Cutter 和 Peel。
      2 -> 開啟熱感，關閉 Cutter 和 Peel。
      3 -> 開啟熱感和 Cutter，關閉 Peel。
      4 -> 開啟熱感和 Peel，關閉 Cutter。
      5 -> 開啟熱轉和 Cutter，關閉 Peel。
      6 -> 開啟熱轉和 Peel，關閉 Cutter。
    p;
      設定Cutter裁切張數,使用Cutter時才有效.

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Select_Option(1);
    B_Select_Option2(3, 2);
  VB: VBA: VB.net:
    Call B_Select_Option(1)
    Call B_Select_Option2(2, 3)

說明：  B_Select_Option, B_Select_Option2函數可以選擇不同 Printer 選項，使印
    表機依據這些選項工作。

*******************************************************************************
B_Select_Symbol()
B_Select_Symbol2()
===============================================================================
功能：  符號設定選擇。

語法：
  VC:
    int B_Select_Symbol(int num_bit, int symbol, int country);
    int B_Select_Symbol2(int num_bit, char csymbol[2], int country);
  VB: VBA:
    Declare Function B_Select_Symbol(ByVal num_bit As Long, ByVal symbol As Long, _
      ByVal country As Long) As Long
    Declare Function B_Select_Symbol2(ByVal num_bit As Long, ByVal csymbol As string, _
      ByVal country As Long) As Long
  VB.net:
    Declare Function B_Select_Symbol(ByVal num_bit As Integer, ByVal symbol As Integer, _
      ByVal country As Integer) As Integer
    Declare Function B_Select_Symbol2(ByVal num_bit As Integer, ByVal csymbol As string, _
      ByVal country As Integer) As Integer

參數：
    num_bit;
      資料位元數量。8 是 8-bit data 和 7 是 7-bit data。
    symbol;
      符號設定。見下表：備註：工廠內定符號設定是 Code page 437(English)。
      +---------------------------+---------------------------+
      |       8 bit data          |       7 bit data          |
      +------+--------------------+------+--------------------+
      |symbol|    Code page       |symbol|     Code page      |
      +------+--------------------+------+--------------------+
      |  0   |English(437)        |  0   |USASCII             |
      +------+--------------------+------+--------------------+
      |  1   |Latin(850)          |  1   |British             |
      +------+--------------------+------+--------------------+
      |  2   |Slavic(852)         |  2   |German              |
      +------+--------------------+------+--------------------+
      |  3   |Portugal(860)       |  3   |French              |
      +------+--------------------+------+--------------------+
      |  4   |Canadian?French(863)|  4   |Danish              |
      +------+--------------------+------+--------------------+
      |  5   |Nordic(865)         |  5   |Italian             |
      +------+--------------------+------+--------------------+
      |      |                    |  6   |Spanish             |
      +------+--------------------+------+--------------------+
      |      |                    |  7   |Swedish             |
      +------+--------------------+------+--------------------+
      |      |                    |  8   |Swiss               |
      +------+--------------------+------+--------------------+
    csymbol;
      符號設定。見下表：備註：工廠內定符號設定是 Code page 437(English)。
      +---------------------------+---------------------------+
      |       8 bit data          |       7 bit data          |
      +------+--------------------+------+--------------------+
      |symbol|    Code page       |symbol|     Code page      |
      +------+--------------------+------+--------------------+
      |  0   |English(437)        |  0   |USASCII             |
      +------+--------------------+------+--------------------+
      |  1   |Latin(850)          |  1   |British             |
      +------+--------------------+------+--------------------+
      |  2   |Slavic(852)         |  2   |German              |
      +------+--------------------+------+--------------------+
      |  3   |Portugal(860)       |  3   |French              |
      +------+--------------------+------+--------------------+
      |  4   |Canadian/French(863)|  4   |Danish              |
      +------+--------------------+------+--------------------+
      |  5   |Nordic(865)         |  5   |Italian             |
      +------+--------------------+------+--------------------+
      |  6   |Turkish(857)        |  6   |Spanish             |
      +------+--------------------+------+--------------------+
      |  7   |Icelandic(861)      |  7   |Swedish             |
      +------+--------------------+------+--------------------+
      |  8   |Hebrew(862)         |  8   |Swiss               |
      +------+--------------------+------+--------------------+
      |  9   |Cyrillic(855)       |      |                    |
      +------+--------------------+------+--------------------+
      |  10  |Cyrillic CIS(866)   |      |                    |
      +------+--------------------+------+--------------------+
      |  11  |Greek(737)          |      |                    |
      +------+--------------------+------+--------------------+
      |  12  |Greek(851)          |      |                    |
      +------+--------------------+------+--------------------+
      |  13  |Greek(869)          |      |                    |
      +------+--------------------+------+--------------------+
      |  A   |Latin(1252)         |      |                    |
      +------+--------------------+------+--------------------+
      |  B   |Latin(1250)         |      |                    |
      +------+--------------------+------+--------------------+
      |  C   |Cyrillic(1251)      |      |                    |
      +------+--------------------+------+--------------------+
      |  D   |Greek(1253)         |      |                    |
      +------+--------------------+------+--------------------+
      |  E   |Turkish(1254)       |      |                    |
      +------+--------------------+------+--------------------+
      |  F   |Hebrew(1255)        |      |                    |
      +------+--------------------+------+--------------------+
    country;
      KDU country code.

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Select_Symbol(7, 5, 1);
      or
    B_Select_Symbol2(7, "5", 1);
  VB: VBA: VB.net:
    Call B_Select_Symbol(7, 5, 1)
      or
    Call B_Select_Symbol2(7, "5", 1)

說明：  這個 B_Select_Symbol 函數可以選擇適當符號設定。

*******************************************************************************
B_Set_Backfeed()
===============================================================================
功能：  啟動 Back feed。

語法：
  VC:
    int B_Set_Backfeed(char option);
  VB: VBA:
    Declare Function B_Set_Backfeed(ByVal options As Byte) As Long
  VB.net:
    Declare Function B_Set_Backfeed(ByVal options As Byte) As Integer

參數：
    option;
      功能選項，"B" 關閉 Back feed。"F" 啟動 Back feed。
      它可吐出一定長度，讓使用者看到印出結果。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_Backfeed('B');
  VB: VBA: VB.net:
    Call B_Set_Backfeed(Asc("B"))

說明：  這個 B_Set_Backfeed 函數可以調整停止點。

******************************************************************************
B_Set_Backfeed_Offset()
==============================================================================
功能：  設定 Back Feed 偏移量(只用於撕紙模式).

語法：
  VC:
    int B_Set_Backfeed_Offset(int offset);
  VB: VBA:
    Declare Function B_Set_Backfeed_Offset(ByVal offset As Long) As Long
  VB.net:
    Declare Function B_Set_Backfeed_Offset(ByVal offset As Integer) As Integer

參數：
    offset;
      back feed 偏移量，範圍：-127～127 pixels.

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_Backfeed('F');
    B_Select_Option(2);
    B_Set_Backfeed_Offset(0);
  VB: VBA: VB.net:
    Call B_Set_Backfeed(Asc("F"))
    Call B_Select_Option(2)
    Call B_Set_Backfeed_Offset(0)

REMARK  這個 B_Set_Backfeed_Offset 函式需要使用 firmware 2012/10/15 或更新的版本。

******************************************************************************
B_Set_CutPeel_Offset()
==============================================================================
功能：  設定裁切或剝紙偏移量(只用於裁切/剝紙模式).

語法：
  VC:
    int B_Set_CutPeel_Offset(int offset);
  VB: VBA:
    Declare Function B_Set_CutPeel_Offset(ByVal offset As Long) As Long
  VB.net:
    Declare Function B_Set_CutPeel_Offset(ByVal offset As Integer) As Integer

參數：
    offset;
      裁切或剝紙偏移量，範圍：-128～127 pixels.

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Select_Option(3);
    B_Set_CutPeel_Offset(0);
  VB: VBA: VB.net:
    Call B_Select_Option(3)
    Call B_Set_CutPeel_Offset(0)

*******************************************************************************
B_Set_BMPSave()
===============================================================================
功能：  儲存影像圖檔。

語法：
  VC:
    int B_Set_BMPSave(int nSave, char *pstrBMPFName);
  VB: VBA:
    Declare Function B_Set_BMPSave(ByVal nSave As Long, _
      ByVal pstrBMPFName As String) As Long
  VB.net:
    Declare Function B_Set_BMPSave(ByVal nSave As Integer, _
      ByVal pstrBMPFName As String) As Integer

參數：
    nSave;
      1 -> 儲存圖檔
      0 -> 不儲存圖檔
    pstrBMPFName; 
      儲存圖檔的名稱

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_BMPSave(1, "C:\\TempBMP.bmp");
  VB: VBA: VB.net:
    Call B_Set_BMPSave(1, "C:\\TempBMP.bmp")

說明：  這個 B_Set_BMPSave 函數，可以決定是否儲存影像圖檔。

*******************************************************************************
B_Set_Darkness()
===============================================================================
功能：  設定熱感頭列印熱度。

語法：
  VC:
    int B_Set_Darkness(int darkness);
  VB: VBA:
    Declare Function B_Set_Darkness(ByVal darkness As Long) As Long
  VB.net:
    Declare Function B_Set_Darkness(ByVal darkness As Integer) As Integer

參數：
    darkness;
      設定熱感頭列印熱度，範圍：0～15，內定是 8。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_Darkness(9);
  VB: VBA: VB.net:
    Call B_Set_Darkness(9)

說明：  這個 B_Set_Darkness 函數控制影像濃淡，想得到更好的印出品質，你應該
    考慮一些因素，印出圖案樣式、速度。

*******************************************************************************
B_Set_DebugDialog()
===============================================================================
功能：  設定除錯環境。

語法：
  VC:
    int B_Set_DebugDialog(int nEnable);
  VB: VBA:
    Declare Function B_Set_DebugDialog(ByVal nEnable As Long) As Long
  VB.net:
    Declare Function B_Set_DebugDialog(ByVal nEnable As Integer) As Integer

參數：
    nEnable;
      1 -> 除錯環境致能
      0 -> 除錯環境關閉

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_DebugDialog(1);
  VB: VBA: VB.net:
    Call B_Set_DebugDialog(1)

說明：  這個 B_Set_DebugDialog 函數，設定除錯環境，除了會回傳錯誤碼，也會秀
    出警示訊息對話框外。

*******************************************************************************
B_Set_Direction()
===============================================================================
功能：  設定列印方向。

語法：
  VC:
    int B_Set_Direction(char direction);
  VB: VBA:
    Declare Function B_Set_Direction(ByVal direction As Byte) As Long
  VB.net:
    Declare Function B_Set_Direction(ByVal direction As Byte) As Integer

參數：
    direction;
      設定列印方向，範圍：B 和 T。它們是對角對稱。內定是 T。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_Direction('T');
  VB: VBA: VB.net:
    Call B_Set_Direction(Asc("T"))

說明：  這個 B_Set_Direction 函數設定列印方向，對整個版面內所有圖形文字。

*******************************************************************************
B_Set_Form()
===============================================================================
功能：  儲存並列印 FORM (表格)。

語法：
  VC:
    int B_Set_Form(LPCTSTR formfile);
  VB: VBA:
    Declare Function B_Set_Form(ByVal formfile As String) As Long
  VB.net:
    Declare Function B_Set_Form(ByVal formfile As String) As Integer

參數：
    formfile;
      表格檔案名稱，可含路徑。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_Form("demo.prn");
  VB: VBA: VB.net:
    Call B_Set_form("demo.prn")

說明：  這個 B_Set_Form 函數儲存並列印 FORM (表格)。在使用這個函數時，須先
    在 B_Print_Form函數之前。使用此函數時，就必須執行 B_Print_Form()。

*******************************************************************************
B_Set_Labgap()
===============================================================================
功能：  同時設定標籤長度及 GAP 長度。

語法：
  VC:
    int B_Set_Labgap(int lablength, int gaplength);
  VB: VBA:
    Declare Function B_Set_Labgap(ByVal lablength As Long, _
      ByVal gaplength As Long) As Long
  VB.net:
    Declare Function B_Set_Labgap(ByVal lablength As Integer, _
      ByVal gaplength As Integer) As Integer

參數：
    lablength;
      在最後影像線段的標籤長度。單位 dot。
    gaplength;
      GAP 長度。當是連續紙時，必須設為 0。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_Labgap(100, 20);
  VB: VBA; VB.net:
    Call B_Set_Labgap(100, 20)

說明：  這個 B_Set_Labgap 函數設定標籤長度及 GAP 長度。

*******************************************************************************
B_Set_Labwidth()
===============================================================================
功能：  設定標籤寬度。

語法：
  VC:
    int B_Set_Labwidth(int labwidth);
  VB: VBA:
    Declare Function B_Set_Labwidth(ByVal labwidth As Long) As Long
  VB.net:
    Declare Function B_Set_Labwidth(ByVal labwidth As Integer) As Integer

參數：
    labwidth;
      標籤寬度。單位 dot。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_Labwidth(250);
  VB: VBA: VB.net:
    Call B_Set_Labwidth(250)

說明：  這個 B_Set_Labwidth 函數設定標籤寬度。當使用此函數，就不能使用
    B_Set_Originpoint 函數。

*******************************************************************************
B_Set_Originpoint()
===============================================================================
功能：  設定開始列印點。

語法：
  VC:
    int B_Set_Originpoint(int hor, int ver);
  VB: VBA:
    Declare Function B_Set_Originpoint(ByVal hor As Long, ByVal ver As Long) As Long
  VB.net:
    Declare Function B_Set_Originpoint(ByVal hor As Integer, _
      ByVal ver As Integer) As Integer

參數：
    hor;
      水平邊界基點。單位 dot。
    ver;
      垂直邊界基點。單位 dot。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_Originpoint(0, 0);
  VB: VBA: VB.net:
    Call B_Set_Originpoint(0, 0)

說明：  這個 B_Set_Originpoint 函數使用重新設定起源點 X、Y 軸。

*******************************************************************************
B_Set_Prncomport()
===============================================================================
功能：  設定 Serial Port。

語法：
  VC:
    int B_Set_Prncomport(int baud, char parity, int data, int stop);
  VB: VBA:
    Declare Function B_Set_Prncomport(ByVal baud As Long, ByVal parity As Byte, _
      ByVal data As Long, ByVal stopp As Long) As Long
  VB.net:
    Declare Function B_Set_Prncomport(ByVal baud As Integer, ByVal parity As Byte, _
      ByVal data As Integer, ByVal stopp As Integer) As Integer

參數：
    baud;
      鮑爾率，如下表：
      38 -> 38400
      19 -> 19200
      96 -> 9600
      48 -> 4800
      24 -> 2400
      57 -> 57600
      11 -> 115200
    parity;
      Parity。'O'是 odd，'E'是 even parity, 'N'是 none parity。
    data;
      Data bit number，7 或 8。
    stop;
      Stop bit number，1 或 2。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_Prncomport(96, 'N', 8, 1);
  VB: VBA: VB.net:
    Call B_Set_Prncomport(96, Asc("N"), 8, 1)

說明：  這個 B_Set_Prncomport 函數會設定印表機序列埠設定值，來改變印表機相同於
    PC 序列埠設定值，如果不同則無法與 PC 連接。此函數必須在函數 Print_Out
    之前執行，必須單獨執行。

*******************************************************************************
B_Set_Prncomport_PC()
===============================================================================
功能：  設定 PC 序列埠。

語法：
  VC:
    int B_Set_Prncomport_PC(int nBaudRate, int nByteSize, int nParity, int nStopBits,
      int nDsr, int nCts, int nXonXoff);
  VB: VBA:
    Declare Function B_Set_Prncomport_PC(ByVal nBaudRate As Long, _
      ByVal nByteSize As Long, ByVal nParity As Long, ByVal nStopBits As Long, _
      ByVal nDsr As Long, ByVal nCts As Long, ByVal nXonXoff As Long) As Long
  VB.net:
    Declare Function B_Set_Prncomport_PC(ByVal nBaudRate As Integer, _
      ByVal nByteSize As Integer, ByVal nParity As Integer, ByVal nStopBits As Integer, _
      ByVal nDsr As Integer, ByVal nCts As Integer, ByVal nXonXoff As Integer) As Integer

參數：
    nBaudRate;
      鮑爾率，如下表：
      1 -> 110     9 -> 19200
      2 -> 300    10 -> 38400
      3 -> 600    11 -> 56000
      4 -> 1200   12 -> 57600
      5 -> 2400   13 -> 115200
      6 -> 4800   14 -> 128000
      7 -> 9600   15 -> 256000
      8 -> 14400   0 -> 9600
    nByteSize;
      Data bit number:
      0 -> 7-bit data
      7 -> 7-bit data
      8 -> 8-bit data
    nParity;
      Parity，如下表：
      0 -> none parity
      1 -> even parity
      2 -> odd  parity
    nStopBits;
      Stop bit number:
      0 -> 1 stop bit
      1 -> 1 stop bit
      2 -> 2 stop bits
    nDsr;
      Setup hardware flow control
      1 -> DTR CONTROL HANDSHAKE;
      0 -> DTR CONTROL ENABLE;
    nCts;
      Setup hardware flow control
      1 -> RTS CONTROL HANDSHAKE;
      0 -> RTS CONTROL ENABLE;
    nXonXoff;
      Setup software flow control
      0 -> Enable;
      1 -> Disable;

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_Prncomport_PC(0, 0, 0, 0, 0, 0, 0);
  VB: VBA: VB.net:
    Call B_Set_Prncomport_PC(0, 0, 0, 0, 0, 0, 0)

說明：  這個 B_Set_Prncomport_PC 函數會設定 PC 序列埠設定值，來改變 PC 相同於印表機序列埠
    設定值，如果不同則無法與印表機連接。此函數必須在函數 B_Print_Out 之前執行。

*******************************************************************************
B_Set_Speed()
===============================================================================
功能：  設定列印速度。

語法：
  VC:
    int B_Set_Speed(int speed);
  VB: VBA:
    Declare Function B_Set_Speed(ByVal speed As Long) As Long
  VB.net:
    Declare Function B_Set_Speed(ByVal speed As Integer) As Integer

參數：
    speed;
      列印速度，範圍：0～7。
      +-------------+------------------+
      | speed Value | SPEED            |
      +-------------+------------------+
      | 0 or 1      | 1 ips (25 mmps)  |
      +-------------+------------------+
      |   2         | 2 ips (50 mmps)  |
      +-------------+------------------+
      |   3         | 3 ips (75 mmps)  |
      +-------------+------------------+
      |   4         | 4 ips (100 mmps) |
      +-------------+------------------+
      |   5         | 5 ips (125 mmps) |
      +-------------+------------------+
      |   6         | 6 ips (150 mmps) |
      +-------------+------------------+
      |   7         | 7 ips (175 mmps) |
      +-------------+------------------+

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_Speed(2);
  VB: VBA: VB.net:
    Call B_Set_Speed(2)

說明：  這個 B_Set_Speed 函數設定列印速度。

*******************************************************************************
B_Set_ProcessDlg()
===============================================================================
功能：  開啟或關閉進度對話框。

語法：
  VC:
    int B_Set_ProcessDlg(int nShow);
  VB: VBA:
    Declare Function B_Set_ProcessDlg(ByVal nShow As Long) As Long
  VB.net:
    Declare Function B_Set_ProcessDlg(ByVal nShow As Integer) As Integer

參數：
    nShow;
      0 -> 關閉。
      1 -> 開啟。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_ProcessDlg(1);
  VB: VBA: VB.net:
    Call B_Set_ProcessDlg(1)

說明：  這個 B_Set_ProcessDlg 函數可開關進度對話框。

*******************************************************************************
B_Set_ErrorDlg()
===============================================================================
功能：  開啟或關閉重試詢問視窗。

語法：
  VC:
    int B_Set_ErrorDlg(int nShow);
  VB: VBA:
    Declare Function B_Set_ErrorDlg(ByVal nShow As Long) As Long
  VB.net:
    Declare Function B_Set_ErrorDlg(ByVal nShow As Integer) As Integer

參數：
    nShow;
      0 -> 關閉。
      1 -> 開啟。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Set_ErrorDlg(1);
  VB: VBA: VB.net:
    Call B_Set_ErrorDlg(1)

說明：  這個 B_Set_ErrorDlg 函數可開關重試詢問視窗。

*******************************************************************************
B_Bar2d_PDF417_N()
===============================================================================
功能：  印出一個 PDF-417 2D Barcode。

語法：
  VC:
    int B_Bar2d_PDF417_N(int x, int y, int w, int h, LPCTSTR pParameter, LPCTSTR data);
  VB: VBA:
    Declare Function B_Bar2d_PDF417_N Lib(ByVal x As Long, ByVal y As Long, _
      ByVal w As Long, ByVal h As Long, ByVal pParameter As String, _
      ByVal data As String) As Long
  VB.net:
    Declare Function B_Bar2d_PDF417_N Lib(ByVal x As Integer, ByVal y As Integer, _
      ByVal w As Integer, ByVal h As Integer, ByVal pParameter As String, _
      ByVal data As String) As Integer

參數：
    x;
      X 座標。
    y;
      Y 座標。
    w;
      最大列印寬度，單位 dots。
    h;
      最大列印高度，單位 dots。
    pParameter;
      其他可隱藏之參數,此參數可以是NULL。
      錯誤校正等級(s)，範圍：0～8。
      資料壓縮等級(c)，範圍：0 或 1。
      print human readable(pxxx,yyy,mm)
      xxx:Human readable horizontal start location, 0 ~ 999.
      yyy: Human readable vertical start location, 0 ~ 999.
      mm:Maximum characters per line, 0 ~ 99.
      f:Bar code origin point. 0=Upper left corner of barcode; 1=Center of barcode (default).
      模組寬度(x)，範圍：2～9 dots。
      模組高度(y)，範圍：4～99 dots。
      最大 row count(r)。
      最大 column count(l)。
      Truncation flag(t)，'0' 是 normal 和 '1' 是 truncated.
      Rotation(o)，'0'是 0°，'1'是90°、'2'是180°，'3'是270°.
    data;
      資料字串。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Bar2d_PDF417_N(10,10,400,300,"s0,c0,p400,400,10,f0,x3,y7,r10,l2,f0","ARGOXINFO");
  VB: VBA: VB.net:
    Call B_Bar2d_PDF417_N(10, 10, 400, 300, "s0,c0,p400,400,10,f0,x3,y7,r10,l2,f0", _
      "ARGOXINFO");

說明：  這個 B_Bar2d_PDF417 函數可以列印出一個 PDF-417 2D Barcode。

*******************************************************************************
B_ResetPrinter()
==============================================================================
功能：  此函數會使印表機重新開機。

語法：
  VC:
    int B_ResetPrinter();
  VB: VBA:
    Declare Function B_ResetPrinter() As Long
  VB.net:
    Declare Function B_ResetPrinter() As Integer

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_ResetPrinter();
  VB: VBA: VB.net:
    Call B_ResetPrinter()

*******************************************************************************
B_GetPrinterResponse()
==============================================================================
功能：  此函數是印表機有錯誤發生時用來讀取印表機錯誤代碼。

語法：
  VC:
    int B_GetPrinterResponse(char *pbuf, int nMax);
  VB: VBA:
    Declare Function B_GetPrinterResponse(ByVal pbuf As String, _
      ByVal nMax As Long) As Long
  VB.net:
    Declare Function B_GetPrinterResponse(ByVal pbuf As Byte(), _
      ByVal nMax As Integer) As Integer

傳回值：
    所讀取到的資料長度.

範例：
  VC:
    char *pbuf, temp[3];
    int nMax = 100;
    pbuf = (char *)new char[nMax];
    B_GetPrinterResponse(pbuf, nMax);

    if(pbuf[0] == '\x15'){
      memcpy(temp, pbuf + 1, 2);
      nError = atoi(temp);
      if(nError == 1)
        AfxMessageBox("Command phrase error");
      else if(nError == 3)
        AfxMessageBox("Data error for barcode");
      else if(nError == 4)
        AfxMessageBox("Memory full");
      else if(nError == 7)
        AfxMessageBox("Media or ribbon out");
      else{
        strTemp.Format("%d", pbuf[1]);
        AfxMessageBox(strTemp);
      }
    }
  VB: VBA:
    Dim pbuf As String
    pbuf = String$(100, vbNullChar)
    Call B_GetPrinterResponse(pbuf,100)

    If Mid(pbuf,1,1) = Chr(&H15) Then
      If Mid(pbuf,2,2) = "01" Then
        MsgBox "Command phrase error"  
      ElseIf Mid(pbuf,2,2) = "03" Then
        MsgBox "Data error for barcode"
      ElseIf Mid(pbuf,2,2) = "04" Then
        MsgBox "Memory full"
      ElseIf Mid(pbuf,2,2) = "07" Then
        MsgBox "Media or ribbon out"
      Else
        MsgBox "Error Code=" & Mid(pbuf,2,2)
      End If
    End If

Remark :
    要使用此函數前要先呼叫 B_Error_Reporting('S') 啟動印表機回傳功能否則會無法得到
    錯誤代碼.

*******************************************************************************
B_TFeedMode()
==============================================================================
功能：  此函數可使印表機切換到 T Feed 模式。

語法：
  VC:
    int B_TFeedMode(int nMode);
  VB: VBA:
    Declare Function B_TFeedMode(ByVal nMode As Long) As Long
  VB.net:
    Declare Function B_TFeedMode(ByVal nMode As Integer) As Integer

參數：
    nMode;
      0 -> Normal.
      1 -> T Feed Mode.
      
傳回值：
    0 -> OK
    Reference BW-Error.txt file.

範例：
  VC:
    B_TFeedMode(0);
  VB: VBA: VB.net:
    Call B_TFeedMode(0)

Remark : 此函數僅使用在X-1000+且軔體版本為"X1B0-2.40C"和"X1B0-2.41C

*******************************************************************************
B_TFeedTest()
==============================================================================
功能：  當印表機在 T Feed 模式時,做紙張偵測。

語法：
  VC:
    int B_TFeedTest(void);
  VB: VBA:
    Declare Function B_TFeedTest() As Long
  VB.net:
    Declare Function B_TFeedTest() As Integer

傳回值：
    0 --> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_TFeedTest();
  VB: VBA: VB.net:
    Call B_TFeedTest()

Remark : 此函數僅使用在X-1000+且軔體版本為"X1B0-2.40C"和"X1B0-2.41C

*******************************************************************************
B_Eexcute_Form()
===============================================================================
功能：  列印一個已存在放印表機內的 FORM (表格)，並輸入 FORM 所有變數、計數資料。

語法：
  VC:
    int B_Execute_Form(char form_out[10], LPTSTR var);
  VB: VBA:
    Declare Function B_Execute_Form(ByVal form_out As String, _
      ByVal var As String) As Long
  VB.net:
    Declare Function B_Execute_Form(ByVal form_out As String, _
      ByVal var As String) As Integer

參數：
    form_out;
      表格名稱，同於之前載入的 FORM 名稱，或原先儲存在印表機內的 FORM。
    var;
      輸入 FORM 所有變數、計數資料，用 ","依序分別區隔開。如果變數裡有","號，
      可用";,"來代表逗號。

傳回值：
    0 --> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Execute_Form("demo", "2000,Bicycle");
  VB: VBA: VB.net:
    Call B_Execute_Form("demo", "2000,Bicycle")

*******************************************************************************
B_Bar2d_QR()
===============================================================================
功能：  列印 QR 條碼。

語法：
  VC:
    int B_Bar2d_QR(int x, int y, int model, int scl, char error, char dinput, int c,
      int d, int p, LPCTSTR data);
  VB: VBA:
    Declare Function B_Bar2d_QR(ByVal x As Long, ByVal y As Long, ByVal model As Long, _
      ByVal scl As Long, ByVal err As Byte, ByVal dinput As Byte, ByVal c As Long, _
      ByVal d As Long, ByVal p As Long, ByVal data As String) As Long
  VB.net:
    Declare Function B_Bar2d_QR(ByVal x As Integer, ByVal y As Integer, _
      ByVal model As Integer, ByVal scl As Integer, ByVal err As Byte, _
      ByVal dinput As Byte, ByVal c As Integer, ByVal d As Integer, ByVal p As Integer, _
      ByVal data As String) As Integer

參數：
    x;
      X 座標。
    y;
      Y 座標。
    model;
      QR條碼模式，範圍:1,2 (若不符範圍則印表機會採用預設值: 2)。
    scl;
      條碼尺寸，範圍: 1~99 (若不符範圍則印表機會採用預設值: 3)。
    error;
      錯誤校正等級。
      L = Lower error correction, most data
      M = Default
      Q = Optimized for error correction over data
      H = Highest error correction, latest data
      (若不符範圍則印表機會採用預設值: M)
    dinput;
      資料輸入模式。
      A = 自動模式 
      M = 手動模式
      (若不符範圍則印表機會採用預設值: A)
    c,d,p;
      附加符號。(若變數範圍不符則會取消此項功能)
      +-------------+-----+------+
      |    項目     | 變數| 範圍 |
      +-------------+-----+------+
      |Symbol Number|  c  | 1~16 |
      +-------------+-----+------+
      |  Divisions  |  d  | 1~16 |
      +-------------+-----+------+
      |   Parity    |  p  | 0~255|
      +-------------+-----+------+                     
    data;
      資料字串。
      如果dinput的值為M(手動模式)，則資料字串的起始字元必須是下列字元之一 
      N = 數字資料 
      A = 字母與數字資料
      Bxxxx = 8位元組模式，"xxxx" 代表字元數量。
              (簡體中文或繁體中文一個字代表兩個字元)
      K=漢字資料

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    B_Bar2d_QR(100, 100, 1, 3, 'M', 'A', 0, 0, 0, "N123456789");
  VB: VBA: VB.net:
    Call B_Bar2d_QR(100, 100, 1, 3, Asc("M"), Asc("A"), 0, 0, 0, "N123456789")

說明：  B_Bar2d_QR 函數可以列印 QR 條碼。

*******************************************************************************
B_Set_EncryptionKey()
===============================================================================
功能: 設定加密鑰匙的值。

語法:
  VC:
    int B_Set_EncryptionKey(char encryptionKey[16]);
  VB: VBA:
    Declare Function B_Set_EncryptionKey(ByVal encryptionKey As String) As Long
  VB.net:
    Declare Function B_Set_EncryptionKey(ByVal encryptionKey As String) As Integer

參數:
    encryptionKey;
      加密鑰匙的值, 需16個字元, 其字元的範圍為0x21至0x7E。

傳回值:
    0 -> OK.
    Reference BW-Error.txt file.

範例:
  VC:
    B_Set_EncryptionKey("key-123456789000");
  VB: VBA: VB.net:
    Call B_Set_EncryptionKey("key-123456789000")

說明:  此函式用來設定加密鑰匙的值, 且會立即傳送資料, 並將其值儲存至印表機中。

*******************************************************************************
B_Check_EncryptionKey()
===============================================================================
功能：  確認加密鑰匙的正確性。

語法：
  VC:
    int B_Check_EncryptionKey(char decodeKey[8], char encryptionKey[16], DWORD dwTimeoutms);
  VB: VBA:
    Declare Function B_Check_EncryptionKey(ByVal decodeKey As String, ByVal encryptionKey As String, _
      ByVal dwTimeoutms As Long) As Long
  VB.net:
    Declare Function B_Check_EncryptionKey(ByVal decodeKey As String, ByVal encryptionKey As String, _
      ByVal dwTimeoutms As ULong) As Integer

參數：
    decodeKey;
      解碼鑰匙的值, 需8個字元, 其字元的範圍為0x21至0x7E。
    encryptionKey;
      加密鑰匙的值, 需16個字元, 其字元的範圍為0x21至0x7E。
    dwTimeoutms;
      計數時間, 也就是讀取資料最長的時間, 單位為ms。

傳回值：
    0 -> OK.
    Reference BW-Error.txt file.

範例：
  VC:
    int ret;
    ret = B_Check_EncryptionKey("test-par", "key-123456789000", 1000);//1 second.
  VB: VBA:
    Dim ret As Long
    ret = B_Check_EncryptionKey("test-par", "key-123456789000", 1000)   '1 second.
  VB.net:
    Dim ret As Integer
    ret = B_Check_EncryptionKey("test-par", "key-123456789000", 1000)   '1 second.

說明：  此函式用來確認加密鑰匙的正確性。將 decodeKey 的值傳至印表機後, 
    和印表機中的加密鑰匙做運算後回傳運算結果, 然後和 decodeKey 及 encryptionKey 
    的值運算後的結果做比對, 看看是否相同。
