无法解析的外部符号 _CLSID_FilterGraph

刚开始学习DirectShow编程,以前都只是停留在书本,网络的文字上面。

编译的时候碰上这个错误,网上也查不到具体的说明,还以为是头文件没有包含。

由以下这段代码引发:

hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&pGraph);

错误信息:

1>testDirectShow.obj : error LNK2001: 无法解析的外部符号 _CLSID_FilterGraph
1>testDirectShow.obj : error LNK2001: 无法解析的外部符号 _IID_IGraphBuilder
1>F:\TDDOWNLOAD\testDirectShow\Debug\testDirectShow.exe : fatal error LNK1120: 2 个无法解析的外部命令

后来查到是因为库文件没有包含的原因。特此记录,希望也能帮助碰到此问题的人。


解决办法:

在代码中引入库文件:

#pragma comment(lib,"Strmiids.lib")

Strmiids.lib    

    提供类标识(CLSIDs)和接口表示(IIDs)。所有的DirectShow程序都要求使用该库文件。

  

`PyIDispatch' object has no attribute '_reg_clsid_'` 错误提示表明你在尝试访问一个 `PyIDispatch` 对象的 `_reg_clsid_` 属性时失败了,因为该对象并没有定义这个属性。这种情况通常出现在使用 Python 和 COM(组件对象模型)交互的时候。 ### 解释 1. **PyIDispatch**:这是 Python 中用于封装 COM 接口的一个类,主要用来与 Windows 上基于 COM 技术的应用程序和服务进行通信。当你通过 Python 访问某些 Office 应用程序如 Excel 或 Word 时,可能会遇到此类对象。 2. **_reg_clsid_**:这是一个私有属性名,一般用于指定 COM 类别的 CLSID (Class Identifier)。CLSID 是一个唯一的标识符,用于识别和实例化特定类型的 COM 组件。 当出现上述错误时,意味着你正试图从一个不支持或不需要此属性的对象那里获取它。这可能是由于代码逻辑上的误解或是对 API 使用不当造成的。 ### 可能的原因及解决方法 - **确认对象类型**:确保你操作的是正确的对象并且知道它的预期行为。例如,在处理 COM 对象之前,请查阅相关文档了解哪些属性是有效的。 - **检查是否混淆了其他接口**:有时开发者会不小心将不同种类的对象混在一起,导致调用了不存在的方法或属性。仔细核对你所使用的对象及其来源非常重要。 - **API 版本差异**:如果你依赖于第三方库,则要留意是否有版本更新引入的变化影响到现有功能。查看最新版次的官方说明并做相应调整。 - **调试技巧**:打印出对象的所有可用属性列表以帮助定位具体的问题所在: ```python print(dir(your_object)) ``` 这样可以帮助你更好地理解当前对象具备什么样的成员变量以及它们的实际含义。 ### 示例修正方案 假设你想获取某 COM 对象的信息但不确定其具体的属性名称,可以先列出所有可访问的属性再逐步查找所需内容: ```python import win32com.client as wc # 创建连接至目标应用程序的 COM 对象示例 app = wc.Dispatch("Excel.Application") # 查看所有可用属性和方法 print([attr for attr in dir(app)]) ``` 通过这种方式可以避免直接硬编码未验证过的属性引用而引发异常。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值