CoCreateInstance为CLSID_WavDest创建空的IBaseFilter
CoCreateInstance creates empty IBaseFilter for CLSID_WavDest
我试图通过在c++ Visual Studio 2010项目中使用directshow framework
来记录.wav
。我遵循本指南的WAV文件部分:https://msdn.microsoft.com/en-us/library/windows/desktop/dd375005(v=vs.85).aspx
我已经建立了WavDest.dll
,将其添加到注册表中,在注册表中找到它,它可以添加为Graphedit中的过滤器。我对_CLSID_WavDest
有未解决的外部符号错误,但通过在我的StdAfx.h
中包括InitGuid.h
并链接WavDest.lib
来修复它。
现在我没有错误,程序没有崩溃,但我得到0字节的wav文件。
代码段:
res = AddFilterByCLSID(dshow_dev->m_pGraph, CLSID_WavDest, (IBaseFilter **)&dshow_dev->m_pWaveDest, L"WavDest");
res = AddFilterByCLSID(dshow_dev->m_pGraph, CLSID_FileWriter, (IBaseFilter **)&dshow_dev->m_pWaveWriter, L"File Writer");
res = dshow_dev->m_pWaveWriter->QueryInterface(IID_IFileSinkFilter, (void**)&dshow_dev->m_pFileSink);
res = dshow_dev->m_pFileSink->SetFileName(L"D:\test.wav", NULL);
res = ConnectFilters(dshow_dev->m_pGraph, dshow_dev->m_pCaptureSourceAudio, dshow_dev->m_pWaveDest);
res = ConnectFilters(dshow_dev->m_pGraph, dshow_dev->m_pWaveDest, dshow_dev->m_pWaveWriter);
AddFilterByCLSID
for CLSID_WavDest
返回S_OK,但dshow_dev->m_pWaveDest
有以下值:-
[CWavDestFilter] {m_cbWavData=0x00000000 m_cbHeader=0x00000000 } CWavDestFilter
.
因此,m_pWaveDest
的ConnectFilters
返回E_Fail
,不录制音频。
我已经尝试了WavDest.dll
的调试和发布版本注册(首先调试,然后unreg调试和reg发布)。
我已经检查了代码中的其他一切,图形(dshow_dev->m_pGraph
)运行良好的视频预览和编写AVI文件(带音频)。
我确信我在WavDest集成中做错了什么,但我不知道是什么。
毕竟是我的错。我已经替换了
assert(pResult != NULL);
函数
// Match a pin by pin direction and connection state.
HRESULT MatchPin(IPin *pPin, PIN_DIRECTION direction, BOOL bShouldBeConnected, BOOL *pResult)
{
assert(pResult != NULL);
BOOL bMatch = FALSE;
BOOL bIsConnected = FALSE;
HRESULT hr = IsPinConnected(pPin, &bIsConnected);
if (SUCCEEDED(hr))
{
if (bIsConnected == bShouldBeConnected)
{
hr = IsPinDirection(pPin, direction, &bMatch);
}
}
if (SUCCEEDED(hr))
{
*pResult = bMatch;
}
return hr;
}
if(pResult == NULL);
{
HRESULT hr = E_FAIL;
return hr;
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++类内存结构中创建"spacer"?
- 终端不会为C++文件创建.exe文件吗
- CoCreateInstance为CLSID_WavDest创建空的IBaseFilter