bcb下运行DirectShow就崩溃

mxmkeep 2010-06-09 09:29:06
我在bcb6下编译运行含有DirectShow代码的程序,好像每次一到链接各个Filter的时候,程序就崩溃。
不知道有没有大侠遇到类似的问题,该怎么解决?

将编译好的程序直接运行就没事。
但是这样不好调试,有时候出问题,很难跟踪。
...全文
89 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mxmkeep 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 silverpot 的回复:]

我以前用也BCB写directshow,总是出莫名其妙的错误,后来放弃了,现在用vs写。

微软已经不单独提供c++ builder版本的库文件了,网上能找到是别人转的或是修改源代码编译出来的,不是官方的。
[/Quote]
唉...BCB确实经常有莫名其妙的错误....
银点 2010-06-09
  • 打赏
  • 举报
回复
我以前用也BCB写directshow,总是出莫名其妙的错误,后来放弃了,现在用vs写。

微软已经不单独提供c++ builder版本的库文件了,网上能找到是别人转的或是修改源代码编译出来的,不是官方的。
mxmkeep 2010-06-09
  • 打赏
  • 举报
回复
以一段链接摄像头的代码为例,调试运行的时候,跟踪到m_pCGBuilder2->RenderStream,再下去就崩溃了
或者自己链接Filter,那么运行到m_pGBuilder->Connect(pSourceOut,pPreIn);就崩溃了。
但是不要在bcb里运行,直接运行exe是没问题的,我用dx,bcb版的示例程序运行,也是这个样子
//设备枚举类
IEnumMoniker *pClassEnum = NULL;
//创建视频设备枚举类
CHECK_RESULT(m_pCDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,
&pClassEnum,0));

//枚举视频设备
ULONG cFetched;
if(S_OK == pClassEnum->Next(1,&this->m_pMoniker,&cFetched))
{
//将找到的视频设备,绑定到源过滤器中
this->m_pMoniker->BindToObject(0,0,IID_IBaseFilter,(void**)&this->m_pVideoFilter);
this->m_pMoniker = NULL;
}
else
{
SAFE_RELEASE(pClassEnum);
ShowMessage("ClassEnum Failed");
return;
}
SAFE_RELEASE(pClassEnum);
assert(m_pVideoFilter);

//添加过滤器到graph builder 管理器中
CHECK_RESULT(m_pGBuilder->AddFilter(m_pVideoFilter,L"Video"));

//采用ICaptureGraphBuilder2接口能自动查看并链接引脚
//把源过滤器的预览引脚链接到预览输出口
CHECK_RESULT(m_pCGBuilder2->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Video,
m_pVideoFilter,NULL,NULL));

// //手动查找并链接引脚
// IPin *pSourceOut = this->FindPin(this->m_pVideoFilter,PINDIR_OUTPUT);
// assert(pSourceOut);
// IPin *pPreIn = FindPin(this->m_pPrevFilter,PINDIR_INPUT);
// assert(pPreIn);
// hr = this->m_pGBuilder->Connect(pSourceOut,pPreIn);

//获取预览窗口句柄
IVideoWindow * pViewWnd= NULL;
//m_pPrevFilter->QueryInterface(IID_IVideoWindow,(void**)&pViewWnd);
CHECK_RESULT(m_pGBuilder->QueryInterface(IID_IVideoWindow,(void**)&pViewWnd));
if (pViewWnd)
{
//设置预览窗口的拥有者
pViewWnd->put_Owner((long)this->Handle);
pViewWnd->put_Left(1);
pViewWnd->put_Top(1);
//获取预览窗口风格
long style;
pViewWnd->get_WindowStyle(&style);
style = style & ~WS_CAPTION;
style = style & ~WS_DLGFRAME;
style = style & WS_CHILD;
pViewWnd->put_WindowStyle(style);
//设置预览窗口宽度和高度
TRect rc;
rc = this->GetClientRect();
pViewWnd->put_Height(rc.Height()-60);
pViewWnd->put_Width(rc.Width()-2);
}
CHECK_RESULT(m_pMCtrlCam->Run());
周药师 2010-06-09
  • 打赏
  • 举报
回复
哪里出的错?
贴出来看看

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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