如何在 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 的旧应用程序,更新是透明的,而新应用程序可以通过获取更新和扩展的接口来发现和使用新功能。这是假定的,但文档有时并不清楚这应该如何工作。
我正在使用 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 的旧应用程序,更新是透明的,而新应用程序可以通过获取更新和扩展的接口来发现和使用新功能。这是假定的,但文档有时并不清楚这应该如何工作。