c++ - IMFSourceResolver::CreateObjectFromByteStream 返回 E_NOTIMPL
问题描述
我尝试从 Microsoft 修改受保护的播放器示例。
我实现了一个提供给 IMFSourceResolver 的自定义 IMFByteStream,但是当我将它提供给“他”时,结果是 E_NOTIMPL,这个功能没有实现吗?!?
解决方案
事实证明,自从我快速实现了 IMFByteStream,我留下了很多方法......你猜对了......没有实现,我没想到它们会被调用,因此解析器返回未实现。
一旦我开始记录所有方法调用,我就开始弄清楚源解析器实际需要什么,并开始提供一个实现。
更重要的是,起初我对 QueryInterface 做了一个非常粗略的实现,它需要一个好的实现,否则解析器会调用错误的方法。一旦我实现了正确的查询接口,它实际上开始理解在我的组件中调用了哪些方法(起初,看到我赋予它读取功能并且它尝试做的第一件事是在我的流上写入,这很奇怪,我不打算实施)。
HRESULT FileByteStream::QueryInterface(REFIID iid, void** ppv) {
if (!ppv) {
return E_POINTER;
}
if (iid == IID_IUnknown) {
*ppv = static_cast<IUnknown*>(this);
} else if (iid == IID_IMFByteStream) {
*ppv = static_cast<IMFByteStream*>(this);
} else {
*ppv = NULL;
return E_NOINTERFACE;
}
AddRef();
return S_OK;
}
推荐阅读
- python - 为什么使用 GPU 时 SSD 在小图像上的推理时间比大图像长
- php - php问题,试图更改文件中的多个数字。Str_replace 替换所有内容直到最大
- r - 如何通过对 R 中的所有列和选择列求和来计算问卷总分和子分数?
- flutter - 为什么软件键盘会导致小部件在打开/关闭时重建?
- excel - 清除除第一个标题以外的列数据 |Excel|VBA|
- mongodb - 使用 mongodb 的多级 $group
- mysql - 无法在同一查询中搜索单个数字和逗号分隔的字符串
- excel - 在不同的工作表中调用范围(作为变量)
- swift - 在核心数据中存储一个 UImage 数组
- node.js - 调试 AWS Lambda node.js ES6