首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 並行埠讀寫:WQL 查詢基址與 inpout32/Win32 API 混合實作(二)

     編輯:關於C語言

針對 POS 列印機並行埠通訊,結合 WQL 查詢基址、inpout32.dll 讀取狀態、Win32 API 寫入資料,實作完整 ParallelPort 類別。

核心程式碼結構

public class ParallelPort : IPort, IDisposable {
    // inpout32 匯入
    [DllImport("inpout32.dll")] private static extern void Out32(uint address, int value);
    [DllImport("inpout32.dll")] private static extern int Inp32(uint address);

    // Win32 API 寫入
    [DllImport("kernel32.dll")] private static extern int CreateFile(...);
    [DllImport("kernel32.dll")] private static extern bool WriteFile(...);

    // WQL 查詢基址
    internal ParallelPort(string portName) {
        this.Name = portName;
        var searcher = new ManagementObjectSearcher(
            "ASSOCIATORS OF {Win32_ParallelPort.DeviceID='" + portName + "'}");
        foreach (var obj in searcher.Get()) {
            if (obj.ClassPath.ClassName == "Win32_PortResource") {
                BasePort = Convert.ToUInt32(obj.Properties["StartingAddress"].Value);
                break;
            }
        }
    }

    public void Open() {
        iHandle = CreateFile(Name, GENERIC_WRITE, 0, 0, 3, 0, 0);
        IsOpen = (iHandle != -1);
        new Thread(ReadState).Start(); // 背景輪詢狀態
    }
    // Read/Write/Close/Dispose 實作略...
}

解決並行埠基址非固定、需即時狀態監控的實務難題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved