Просмотр исходного кода

fix: Port_OpenPRNIO回退——Windows打印机名HWSealPrinter兜底

lq 1 месяц назад
Родитель
Сommit
c875e816e0

+ 13 - 0
internal/modules/printer/service/csn_dll.go

@@ -47,6 +47,19 @@ func csn_OpenUSB(name string) (uintptr, error) {
 	return ret, nil
 }
 
+func csn_OpenPRN(name string) (uintptr, error) {
+	if csnDll == nil {
+		return 0, fmt.Errorf("DLL 未加载")
+	}
+	nameBytes := append([]byte(name), 0)
+	ret, _, _ := csnDll.NewProc("Port_OpenPRNIO").Call(
+		uintptr(unsafe.Pointer(&nameBytes[0])))
+	if ret == 0 {
+		return 0, fmt.Errorf("打开 Windows 打印机失败: %s", name)
+	}
+	return ret, nil
+}
+
 func csn_Close(handle uintptr) {
 	if csnDll != nil && handle != 0 {
 		csnDll.NewProc("Port_ClosePort").Call(handle)

+ 4 - 0
internal/modules/printer/service/service.go

@@ -46,7 +46,11 @@ func (s *PrintService) PrintTicket(printerID uint, lotName, channelCode, plateNo
 					name = printer.PortName
 				}
 			}
+			// 先试 OpenUSB,失败则试 OpenPRN(Windows 打印机名)
 			usbHandle, err = csn_OpenUSB(name)
+			if err != nil {
+				usbHandle, err = csn_OpenPRN(name)
+			}
 			if err == nil {
 				useCSN = true
 				defer csn_Close(usbHandle)