DirectShow - 列舉系統中所有的影像輸入裝置 |
尚未結案
|
maylily
一般會員 發表:4 回覆:0 積分:0 註冊:2008-01-22 發送簡訊給我 |
本人從網上找到有關列舉系統中所有的影像輸入裝置範例,但同時發現當中一些問題。
當VC 6.0 Compile完畢後,出現以下問題: VideoRenderDlg.cpp C:\Program Files\Microsoft Visual Studio\MyProjects\VideoRender\VideoRenderDlg.cpp(213) : error C2065: 'COLE2T' : undeclared identifier C:\Program Files\Microsoft Visual Studio\MyProjects\VideoRender\VideoRenderDlg.cpp(213) : error C2146: syntax error : missing ';' before identifier 'strName' C:\Program Files\Microsoft Visual Studio\MyProjects\VideoRender\VideoRenderDlg.cpp(213) : error C2065: 'strName' : undeclared identifier C:\Program Files\Microsoft Visual Studio\MyProjects\VideoRender\VideoRenderDlg.cpp(216) : error C2146: syntax error : missing ';' before identifier 'strDevicePath' C:\Program Files\Microsoft Visual Studio\MyProjects\VideoRender\VideoRenderDlg.cpp(216) : error C2065: 'strDevicePath' : undeclared identifier Error executing cl.exe. VideoRenderDlg.obj - 5 error(s), 0 warning(s) 請大家幫幫忙,提供一些可行的解決辦法... 謝謝~ ------------------------------------------------------------------------------------------------------------------------------ 以下是我從網頁上找回來的程式碼(由"井民全DirectX系列教學課程"提供的): #include < stdio.h > // for printf #include < atlbase.h > // for ATL 字元型態轉換 #include < Dshow.h > // for DirectShow header file #include < Qedit.h > // for DirectShow 的一堆 Interface 定義 #pragma comment( lib, "Strmiids.lib" ) // for DirectShow library ... ... ... void EnumerateVideoInputDevice(IBaseFilter **pCap){ ICreateDevEnum *pDevEnum = NULL; // Step 1: 建立 System Device Enumerator 幫我們傳回硬體 Moniker 集合 HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, reinterpret_cast IEnumMoniker *pEnum = NULL; if (SUCCEEDED(hr)){ // Step 2: 建立 Video capture 系統列舉物件 hr = pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnum, 0); } // Step 3: 利用列舉物件 Next method 取得硬體 Moniker 物件, 取得硬體資訊 IMoniker *pMoniker = NULL; while (pEnum->Next(1, &pMoniker, NULL) == S_OK) { IPropertyBag *pPropBag; hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void**)(&pPropBag)); if (FAILED(hr)){ pMoniker->Release(); continue; // Skip this one, maybe the next one will work. } // Step 4: 讀取硬體名稱 VARIANT varName; VariantInit(&varName); hr = pPropBag->Read(L"FriendlyName", &varName, 0); if (SUCCEEDED(hr)) { // 將 OLE 型態的字串轉換成 TCHAR 字串 COLE2T strName(varName.bstrVal); printf("裝置名稱 = %s \n",strName); COLE2T strDevicePath(varName.bstrVal); printf("裝置唯一名稱 = %s \n",strDevicePath); VariantClear(&varName); //*pCap = NULL; hr = pMoniker->BindToObject (0, 0, IID_IBaseFilter, (void**)pCap); } pPropBag->Release(); pMoniker->Release(); } printf("列舉結束"); } |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |