如何在C++中访问 DirectWrite 继承的接口?



我正在使用C++来使用DirectWrite,但我似乎无法弄清楚如何使用继承接口中的方法。例如,IDwriteFont1 接口中的"GetUnicodeRanges"方法/函数。

IDWriteFont1 接口/对象不被任何其他 DirectWrite 接口/对象访问,包括 IDWriteFactory - IDWriteFactory7。

IDWriteFont1 接口继承自 IDWriteFont 接口。我尝试了各种创建 IDWriteFont1 对象的方法,包括使用 DWriteCreateFactory,但这种方法似乎主要用于创建各种 IDWriteFactory 对象。

我可以通过 IDWriteFontCollection 通过 IDWriteFactory 通过 DWrite.dll 中的 DWriteCreateFactory 函数访问 IDWriteFont。

任何人都可以提供方向或示例C++代码吗?

您应该能够从接口指针执行IDWriteFontIUnknown::QueryInterface并获取IDWriteFont1,前提是它首先可用并在那里实现。

也就是说,一些伪代码:

IDWriteFont* Font = ...
assert(Font);
IDWriteFont1* Font1 = nullptr;
if(SUCCEEDED(Font->QueryInterface(__uuidof(IDWriteFont1), reinterpret_cast<VOID**>(&Font1))))
{
assert(Font1);
...
Font1->GetUnicodeRanges(...)
...
}

这背后的想法是,可扩展性更新保持原始实现不变,并通过在相同对象(在您的情况下为字体对象(上实现较新版本的接口来添加新功能。对于使用原始接口使用 API 的旧应用程序,更新是透明的,较新的应用可以通过获取较新的扩展接口来发现和使用新功能。这是假设的,但文档有时并不完全清楚这应该如何工作。

相关内容

  • 没有找到相关文章

最新更新