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

How to access DirectWrite inherited interfaces in C++?

我正在使用 C++ 与 DirectWrite 一起工作,但我似乎无法弄清楚如何使用继承接口中的方法。例如IDwriteFont1接口中的“GetUnicodeRanges”method/function

IDWriteFont1 interface/object 未被任何其他 DirectWrite interface/object 访问,包括 IDWriteFactory - IDWriteFactory7。

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

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

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

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

也就是一些伪代码:

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

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