獲取Filter的三種途徑

2021-09-08 13:10:15 字數 2795 閱讀 2172

一、通過clsid

[cpp]view plain

copy

print

?

ibasefilter *pf = 0;  

hresult

hr = cocreateinstance(clsid, 0, clsctx_inproc_server,  

iid_ibasefilter, reinterpret_cast

<

void

**>(&pf));  

二、通過系統列舉器

[cpp]view plain

copy

print

" style="text-decoration:none;background-image:none;border:none;font-size:9px;">?

" style="text-decoration:none;background-image:none;border:none;font-size:9px;">

" style="text-decoration:none;background-image:none;border:none;font-size:9px;">

icreatedevenum *psysdevenum = null;  

hr = cocreateinstance(clsid_systemdeviceenum, null, clsctx_inproc_server,  

iid_icreatedevenum, (void

**)&psysdevenum);  

if(failed(hr))  

ienummoniker *penumcat = null;  

hr = psysdevenum->createclassenumerator(clsid_videocompressorcategory, &penumcat, 0);  

if(hr == s_ok)   

pmoniker->release();  

}  penumcat->release();  

}  psysdevenum->release();  

[cpp]view plain

copy

print

" style="text-decoration:none;background-image:none;border:none;font-size:9px;">?

" style="text-decoration:none;background-image:none;border:none;font-size:9px;">

" style="text-decoration:none;background-image:none;border:none;font-size:9px;">

ienummoniker *penum = null;  

(void

guid arrayintypes[2];  

arrayintypes[0] = mediatype_video;  

arrayintypes[1] = mediasubtype_dvsd;  

&penum,  

0,                  // reserved.

true,               // use exact match?

merit_do_not_use+1, // minimum merit.

true,               // at least one input pin?

1,                  // number of major type/subtype pairs for input.

arrayintypes,       // array of major type/subtype pairs for input.

null,               // input medium.

null,               // input pin category.

false,              // must be a renderer?

true,               // at least one output pin?

0,                  // number of major type/subtype pairs for output.

null,               // array of major type/subtype pairs for output.

null,               // output medium.

null);              // output pin category.

imoniker *pmoniker;  

ulong

cfetched;  

while

(penum->next(1, &pmoniker, &cfetched) == s_ok)  

pmoniker->release();  

}  penum->release();  

第一種方法是最直接的,也最簡單,只是當不清楚clsid的時候。就不得不用後面兩種方法。

另外一種方法和第三中方法都是使用列舉器列舉filter。通過匹配filter的屬性來得到filter,它們不同之處在於:另外一種通過確定的種類獲得列舉器,第三種通過**型別獲得列舉器。

獲得列舉器以後的步驟是同樣的。

這三種方法最經常使用的是另外一種。

增加程式設計經驗的三種途徑

1.無償工作 或幾乎免費 企業界通常可能並不想僱傭經驗少或沒有經驗的人,而非盈利界通常樂意 至少願意 僱傭這一類人。我在高中的時候,去我們當地發育性殘疾人家庭當志願者,我是這樣進入程式設計師這行的。我用excel 來為他們管理財務,幫他們把這些資訊整理到了乙個 上,等等。工作很吸引人嗎?完全不是那麼...

C 生成XML的三種途徑

為了全面,這裡都將xml儲存到檔案中,有三種生成xml的方式 1。我認為是最原始,最基本的一種 利用xmldocument向乙個xml檔案裡寫節點,然後再利用xmldocument儲存檔案。首先載入要寫入的xml檔案,但是如果沒有的,就要新建,在新建的過程中,要有寫入的 xmldocument do...

C 生成XML的三種途徑

為了全面,這裡都將xml儲存到檔案中,有三種生成xml的方式 1。我認為是最原始,最基本的一種 利用xmldocument向乙個xml檔案裡寫節點,然後再利用xmldocument儲存檔案。首先載入要寫入的xml檔案,但是如果沒有的,就要新建,在新建的過程中,要有寫入的 xmldocument do...