首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

VFW 視訊捕獲錯誤 418/513:capDriverConnect 需放入迴圈重試

     編輯:程式設計疑難解答

錯誤代碼含義

  • 418:未偵測到捕獲裝置(capDriverConnect 失敗)。
  • 513:裝置連線中斷或驅動程式錯誤。

原因分析

Windows 7/10 上 VFW (avicap32.dll) 與部份攝影機驅動相容性差,capDriverConnect 單次呼叫常因驅動尚未就緒而失敗。

解決方案:重試迴圈

// 最大重試次數
const int MAX_RETRY = 10;
for (int i = 0; i < MAX_RETRY; i++) {
    if (capDriverConnect(hWndC, 0)) {
        break; // 連線成功
    }
    Sleep(500); // 等待驅動就緒
}
if (!capDriverConnect(hWndC, 0)) {
    MessageBox(hWnd, _T("無法連接攝影機"), _T("錯誤"), MB_ICONERROR);
    return;
}

最佳實踐建議

  1. 棄用 VFW:改用 DirectShow (qedit.h)、Media Foundation 或 OpenCV VideoCapture,相容性與功能遠優於 VFW。
  2. 若必須用 VFW:在 WM_CREATE 中啟動背景執行緒輪詢連線,成功後 PostMessage 通知主執行緒開始預覽。
  3. 檢查裝置管理器:確認攝影機驅動為最新版,無黃色驚嘆號。

OpenCV 替代範例

#include <opencv2/opencv.hpp>
cv::VideoCapture cap(0); // 開啟預設攝影機
if (!cap.isOpened()) return -1;
cv::Mat frame;
while (true) {
    cap >> frame;
    if (frame.empty()) break;
    cv::imshow("Camera", frame);
    if (cv::waitKey(30) >= 0) break;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved