请教:Filter注册问题

jx_401 2006-06-22 03:57:54
如果我自己写了一个Filter,定义了CLSID,并且已经注册了
那么我在另写一个程序,调用这个Filter,为什么用CoCreateInstance函数进行调用前面已经定义好的CLSID,为什么系统提示CLSID未被定义呢?
请高人指教如何使用自己写的Filter。
...全文
491 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
bitgold 2006-06-28
  • 打赏
  • 举报
回复
虽然结贴了,但还是说一句呵呵
用DEFINE也可以的,加下底下这一句就能LINK过
#include "INITGUID.H"
LY_401 2006-06-28
  • 打赏
  • 举报
回复
问题解决了,感谢vanalan(追忆似水年华)
原来在新的程序里引用CLSID,要用static const而不是define,晕~~
揭帖给分
vanalan 2006-06-26
  • 打赏
  • 举报
回复
把Sample Grabber Example的路径include到你的工程档看看吧
这个问题我还每遇到过
jx_401 2006-06-24
  • 打赏
  • 举报
回复
可能是我说的不太清楚吧,比如说现在我要使用DirectX 9.0自带的Filter:Sample Grabber Example,由于这个Filter是写在DXSDK\sample\C++\DirectShow\Filter 目录下的,而且他没有注册,我现在把它注册了,然后我想调用它,那么,我把它的头文件拷贝到我的程序Capture的目录下,然后再#include这个.h文件,那么是不是理论上就可以用CoCreateInstance函数来创建这个Filter,并用QuaeryInterface把它加到Filter Graph里,对吧?
可是现在我的出现的问题是:编译器VC6.0 报了如下的错误:(我用的是DXSDK9.0C)

error LNK2001: unresolved external symbol _CLSID_GrabberSample
fatal error LNK1120: 1 unresolved externals

不明白!!!!!


感谢vanalan(追忆似水年华)的关注,非常感谢!!!!

jx_401 2006-06-23
  • 打赏
  • 举报
回复
对源程序生成的.ax文件还要处理马??
jx_401 2006-06-23
  • 打赏
  • 举报
回复
to: vanalan(追忆似水年华)
我把源程序的.h文件拷贝到新程序的目录下,并在程序中Inlude
可是运行时出现如下错误:
error LNK2001: unresolved external symbol _CLSID_GrabberSample
fatal error LNK1120: 1 unresolved externals

CLSID_GrabberSample是我定义的CLSID,
请问老哥该如何解决?麻烦了!!!
vanalan 2006-06-23
  • 打赏
  • 举报
回复
copy过来也可以
不许要重新定义新的CLSID
jx_401 2006-06-23
  • 打赏
  • 举报
回复
是不是把原来定义的GUID拷贝过来就行呢,还是需要重新定义?
vanalan 2006-06-23
  • 打赏
  • 举报
回复
如果你在A.h中定义了CLSID
那么在你的应用程序中需要 include <a.h>
hamimelon 2006-06-23
  • 打赏
  • 举报
回复
新程序里需要重新定义CLSID !!!!!!!!!!!!!!!!!!!!!!
vanalan 2006-06-23
  • 打赏
  • 举报
回复
把相关代码和报错信息发上来看看吧
jx_401 2006-06-23
  • 打赏
  • 举报
回复
.ax文件可以用regsvr32注册
在graph edit中可以看到这个Filter,用graph edit测试没有问题。
而且我现在也是用你说的办法来创建filter,可就是报错
真是郁闷。
继续研究ing
vanalan 2006-06-23
  • 打赏
  • 举报
回复
...
按道理不应该报这种错误
说得详细点
一般的方法是这样
比如我写了一个filter,source code有mp3.h and mp3.cpp。
我在mp3.h中定义了CLSID,比如
// {A40B331F-CA01-4833-8AE4-6C747DC5D813}
DEFINE_GUID(CLSID_Mp3Dec,
0xa40b331f, 0xca01, 0x4833, 0x8a, 0xe4, 0x6c, 0x74, 0x7d, 0xc5, 0xd8, 0x13);
这里注意,CLSID不能从别的地方抄过来,自己生成。

然后build除了一个mp3.ax 或者mp3.dll这个无所谓。
这个时候使用regsvr32 注册这个ax或者dll

然后我又写了个播放器,需要用到mp3.ax。
我会在代码中include mp3.h的
然后使用CoCreateInstance来使用我的filter

这样应该是没有问题的
常见的问题是:
1。没有include .h
那么编译器报错error C2065: 'CLSID_Mp3Dec' : undeclared identifier

2。filter没有注册
编译器不会报错
但是你在运行的时候的HRESULT返回值会是0x80040154 Class not registered


目前我遇到过的情况只有这两种
希望能对你有所帮助
vanalan 2006-06-23
  • 打赏
  • 举报
回复
.ax文件只需要适用regsvr32注册就可以了
jx_401 2006-06-22
  • 打赏
  • 举报
回复
难道在新程序里还需要重新定义CLSID吗?
为什么系统自带的Filter可以用CoCreateInstance创建呢?

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧