2016-04-12 164 views
1

在visual community 2015中,我有一個C++項目。 在cpp文件上面我有如何在vC++中使用samplegrabber? Samplegrabber未定義

#include "stdafx.h" 
#include "VideoCaptureFilterSample.h" 
#include "VideoCaptureFilterSampleDlg.h" 

#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 

進入項目屬性,當我還設置> VC++目錄我加入這個目錄包括:C:\ Program Files文件%28x86%29 \微軟的SDK \的Windows \ V7。 1周\的Samples \多媒體\ DirectShow的\基類

問題是,當我在我的代碼這種類型:

hr = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, 
     IID_PPV_ARGS(&pGrabberF)); 

沒有定義的CLSID_SampleGrabber。

到目前爲止我試過了什麼?已下載directx sdk 9和6以及Microsoft sdk 7.1並在google中搜索qedit.h,但我沒有找到該文件。無法弄清楚如何定義CLSID_SampleGrabber

回答

1

聲明,如下所示:extern "C" { extern GUID CLSID_SampleGrabber; }

然後,一定要鏈接到amstrmid.lib。如果你需要別人,你可以從libs目錄中grep符號。

我沒有完全測試這個,因爲我沒有方便的dshow示例文件,但是當我調試它時,它已經解決到c1f400a0-3f08-11d3-9f0b-006008039e37或類似的東西;你現在可以找到更多關於它的內容,如果你是谷歌的第一部分的GUID:有時使用魔術指導你所需要的只是一個小鉤子,然後你可以輕鬆地挖掘其餘部分。

+0

@Roman R「s是可能是更好的答案,但我發誓,我有這樣的GUID在第一時間。這並不重要,但由於某種原因我的情況有所不同。 – zeromus

+0

你的CLSID是正確的,我只是更新它是完全正確的。其他一切也都很有信譽。 –

+0

奇怪的是,我剛剛從4個不同的amstrmid.lib中找到4個不同的clsids,包括比6.1版本的windows SDK更新的兩個。但我的註冊表中有你的。我認爲armstrmid.lib是垃圾,我應該刪除我的答案,你怎麼看? – zeromus

2

CLSID_SampleGrabber很久以前從Windows SDK中刪除,您需要和version 6.1 Windows SDK一樣早才能找到聲明。僅在最近才從Windows操作系統中刪除實施(Windows Server 2012?)。

你可以拿回來給您的項目下列this example

#pragma region Re-Adding Removed from Windows SDK qedit.h 

struct __declspec(uuid("0579154a-2b53-4994-b0d0-e773148eff85")) 
ISampleGrabberCB : IUnknown 

... 

struct __declspec(uuid("c1f400a0-3f08-11d3-9f0b-006008039e37")) 
SampleGrabber; 
    // [ default ] interface ISampleGrabber 

... 

CComPtr<IBaseFilter> pSgBaseFilter; 
ATLENSURE_SUCCEEDED(pSgBaseFilter.CoCreateInstance(__uuidof(SampleGrabber))); 

鏈接amstrmid.lib是一個很好的提示,但你幾乎不必單獨CLSID_SampleGrabber,你還需要ISampleGrabber和朋友的歡迎,並在圖書館仍然主辦(作爲副作用)的GUIDs不會讓你。

參見:

相關問題