線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2934
推到 Plurk!
推到 Facebook!

DirectShow - 列舉系統中所有的影像輸入裝置

尚未結案
maylily
一般會員


發表:4
回覆:0
積分:0
註冊:2008-01-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-01-22 21:29:39 IP:202.40.xxx.xxx 訂閱
本人從網上找到有關列舉系統中所有的影像輸入裝置範例,但同時發現當中一些問題。

當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(&pDevEnum));
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("列舉結束");
}
編輯記錄
maylily 重新編輯於 2008-01-22 21:31:25, 註解 無‧
maylily 重新編輯於 2008-01-22 21:32:55, 註解 無‧
系統時間:2024-04-20 2:03:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!