【问题标题】:What DLLs do I #import when using DirectShow or other COM libraries in C++?在 C++ 中使用 DirectShow 或其他 COM 库时我要#import 哪些 DLL?
【发布时间】:2016-12-19 10:16:12
【问题描述】:
我在从 C++ 调用 DirectShow 时尝试使用 Compiler COM Support。从earlier post 我知道我需要#importquartz.dll 和qedit.dll。这样做给了我像 IGraphBuilderPtr 这样的智能指针类,我可以看到 IntelliSense 支持它。我现在尝试使用ICaptureGraphBuilder2,但它没有出现在 IntelliSense 中并尝试使用#import devenum.dll,qcap.dll 给了我一个"C1803: Cannot open type library file"。所以,有几个问题:
- 使用 DirectShow 接口时我需要哪些 DLL
#import?
- 一般来说,给定一个 COM 库,我如何知道我可以#import 哪些 DLL?
【问题讨论】:
标签:
c++
visual-c++
com
directshow
typelib
【解决方案1】:
对于 C++ 开发,您不需要 #import。相反,你
#include <dshow.h>
#pragma comment(lib, "strmiids.lib")
你有带有 ATL 的智能指针,例如CComPtr<IFilterGraph2>(或QzCComPtr,只有在开发过滤器而不是高级 DirectShow 消费者代码时才有意义)。
因此,
使用 DirectShow 接口时我需要 #import 哪些 DLL?
无。
一般来说,给定一个 COM 库,我如何知道可以#import 哪些 DLL?
您需要知道 DLL 名称或更确切地说是类型库标识符。您可以从文档或使用 SDK 工具(如 COM/OLE Viewer)或通过注册表查看。我建议使用类型库标识符导入。
如果您需要 GUID,它只会从 C++ 代码导入 DirectShow DLL,而这些 GUID 已被弃用并从 SDK 中排除。