C#中使用DirectN如何访问IDWriteLocalFontFileLoader接口方法
解决DirectN库无法访问IDWriteLocalFontFileLoader接口的方案
IDWriteLocalFontFileLoader接口已被DirectN完整定义,无需单独查找封装类,可通过已创建的DWrite工厂直接获取实例,操作步骤如下:
- 调用
DWriteFunctions.CreateFactory创建IDWriteFactory系列实例 - 调用工厂的
GetFontFileLoader方法,传入内置常量DWriteFontFileLoaderKey.LocalFontFileLoader作为Loader ID,获取通用字体加载器实例 - 将获取到的加载器实例直接转换为
IDWriteLocalFontFileLoader即可调用对应方法
代码示例
// 1. 创建DWrite工厂,可根据需求选择IDWriteFactory/IDWriteFactory2/IDWriteFactory3等版本 using var dwriteFactory = DWriteFunctions.CreateFactory<IDWriteFactory>(DWRITE_FACTORY_TYPE.DWRITE_FACTORY_TYPE_SHARED); // 2. 获取本地字体文件加载器 Guid localLoaderId = DWriteFontFileLoaderKey.LocalFontFileLoader; dwriteFactory.GetFontFileLoader(localLoaderId, out var baseLoader); // 3. 转换为目标接口 var localFontLoader = baseLoader as IDWriteLocalFontFileLoader; if (localFontLoader == null) { throw new InvalidOperationException("无法获取本地字体文件加载器"); } // 4. 调用接口方法示例:从字体文件Key获取本地字体路径 uint pathLength = 0; // fontFileKey、keySize为你从IDWriteFontFile对象的GetKey方法获取的参数 localFontLoader.GetFilePathLengthFromKey(fontFileKey, keySize, ref pathLength); var pathSb = new StringBuilder((int)pathLength + 1); localFontLoader.GetFilePathFromKey(fontFileKey, keySize, pathSb, pathLength + 1); string fontLocalPath = pathSb.ToString();
异常排查
- 确认你使用的DirectN为最新稳定版,旧版本存在该接口导出缺失的问题,直接更新NuGet包即可
- 确保项目的目标框架版本符合DirectN要求:.NET Core 3.0+/NET 5+ 或者 .NET Framework 4.6.1+
- 如果你仅需要加载本地路径下的字体,可直接调用
DWriteFunctions.CreateFontFileReference(string filePath, long fileTime = 0)方法创建字体文件引用,无需手动操作该接口
内容的提问来源于stack exchange,提问作者9552550C
相关产品推荐
相关产品推荐

