無法將參數 1 從“…… *const ”轉換為“HWND”
`CSerialPort::InitPort` 第一個參數型別為 `HWND`(視窗控制代碼),用於接收序列埠通訊事件訊息(如 `WM_COMM_RXCHAR`)。在 `CWnd` 派生類(如 `CDialog`、`CView`)的成員函式中直接傳遞 `this` 指標,型別為 `CWnd*`,無法隱性轉換為 `HWND`。
// 在 CDialog/CDialogEx/CView 等 CWnd 派生類中
CSerialPort myPort;
// 使用 m_hWnd 成員變數取得 HWND
if (!myPort.InitPort(this->m_hWnd, 1, 9600, 'N', 8, 1, EV_RXCHAR, 512)) {
AfxMessageBox(_T("序列埠初始化失敗"));
}
BOOL CMyDialog::OnInitDialog() {
CDialogEx::OnInitDialog();
// 序列埠 1,9600,N,8,1
if (!m_SerialPort.InitPort(GetSafeHwnd(), 1, 9600, 'N', 8, 1, EV_RXCHAR | EV_TXEMPTY, 1024)) {
TRACE(_T("Serial port init failed\n"));
return FALSE;
}
return TRUE;
}
// 接收訊息處理
LRESULT CMyDialog::OnCommRxChar(WPARAM wParam, LPARAM lParam) {
char buffer[1024];
DWORD dwRead = m_SerialPort.ReadData(buffer, 1024);
if (dwRead > 0) {
// 處理接收資料
}
return 0;
}
記得在訊息映射中加入 `ON_MESSAGE(WM_COMM_RXCHAR, OnCommRxChar)` 以接收事件通知。