2

Visual Community 2015 には、c++ プロジェクトがあります。私が持っているcppファイルの上部に

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

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

プロジェクトのプロパティを入力するときにも設定します > VC++ ディレクトリ このディレクトリをインクルードに追加しました: C:\Program Files %28x86%29\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses

問題は、コードに次のように入力するときです。

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 の定義方法がわかりません

4

2 に答える 2

3

CLSID_SampleGrabberはずっと前に Windows SDK から削除されたため、宣言を見つけるにはバージョン 6.1 の Windows SDKが必要です。この実装は、ごく最近 Windows オペレーティング システムから削除されました (Windows Server 2012?)。

次の例に従って、プロジェクトに戻すことができます。

#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、友達も必要であり、(副作用として) GUID をホストしているライブラリではそれが得られません。

以下も参照してください。

于 2016-04-13T04:58:37.957 に答える
1

次のように宣言します。extern "C" { extern GUID CLSID_SampleGrabber; }

次に、必ず amstrmid.lib にリンクしてください。他に必要な場合に備えて、libs ディレクトリからシンボルを grep できます。

dshow サンプル ファイルが手元になかったため、これを完全にテストしませんでしたが、デバッグすると、c1f400a0-3f08-11d3-9f0b-006008039e37またはそのような問題に解決されました。そのGUIDの最初の部分をグーグルで検索すると、それについてもっと多くのことを見つけることができます.時々、魔法のGUIDを使用すると、必要なのは小さなフックだけで、残りは簡単に掘り下げることができます.

于 2016-04-13T01:26:11.360 に答える