【问题标题】:Where can I get a copy of Dwrite_1.dll?我在哪里可以获得 Dwrite_1.dll 的副本?
【发布时间】:2020-07-02 18:08:28
【问题描述】:

在 Windows 10 上,我正在尝试编写 VBA 代码来列出字体中的 Unicode 代码点范围。

我能够在 gdi32.dll 中使用 GetFontUnicodeRanges,但它不能处理超出 xFFFF 的代码点。

进一步的研究在 Dwrite_1.dll 中发现了 GetUnicodeRanges(作为 DirectWrite 的一部分),它应该处理所有 Unicode 代码点,但这不在我的系统上(尽管我有不包含 GetFontUnicodeRanges 的 Dwrite.dll。

我搜索了 SO、整个互联网和微软的网站,但找不到那个 dll。

问题:有人知道我如何/在哪里可以获得 Dwrite_1.dll 的副本吗?

【问题讨论】:

  • 您不需要 DLL。它已经内置在 Windows 中。您只需要使用 COM 实例化 DWrite 对象并枚举 IDWriteFont 接口。您需要的一切都在 Windows SDK 中。
  • selbie - 感谢您这么快回复我。我花了一天的时间来解析您的答案,并为自己是 COM 新手而感到高兴。这就是我
  • ...这是我正在研究的内容(过去几个小时): 1) DWrite 对象是什么以及如何在 VBA 中实例化一个。 2)“枚举到特定接口”的含义。我在 DirectWrite API 上找到了文档(但没有提及对象,除非接口是对象)。在该 API 中,我找到了 IDWriteFont1 接口,在该接口中我找到了 GetUnicodeRanges方法,这是我想在 VBA7 中使用的方法。任何关于如何在 VBA7 代码中使用该方法的进一步指导将不胜感激。
  • 你真正想做什么?大多数 Windows 10 字体都支持大量开箱即用的 unicode。
  • 我正在尝试将 Windows 10 PC 上安装的每种字体的代码点范围转储(到电子表格中)。然后我可以搜索该电子表格来做几件事:1) 确定哪些字体具有特定的字符/代码点,2) 确定哪些字体具有特定的 Unicode“块”,例如箭头、方框图。

标签: vba windows directwrite


【解决方案1】:

没有 DWrite_1.dll。您将 dll 与头文件混为一谈:GetUnicodeRanges 方法在 IDWriteFont1 和 IDWriteFontFace1 接口中实现,DWrite_1.h 头文件支持这些接口。

DWrite 使用 COM。您首先调用DWriteCreateFactory function 来获取工厂接口——即实现所请求的工厂接口的对象。 DWrite有多个工厂接口,对应不同的版本——IDWriteFactory(v1)、IDWriteFactory1(v2)等,每个都增加了新的功能。

IIRC,VBA 使用 COM,但我从未尝试从 VBA 调用 DWrite.dll。我会搜索有关 VBA 调用 COM 接口的讨论。

您真的需要以编程方式执行此操作吗?您可以使用一些工具来检查字体。我用了很久SIL ViewGlyph;另请查看BabelMap

【讨论】:

  • Peter – 非常感谢您回复我。我想在回复之前研究你提到的工具。看起来 ViewGlyph 一次只能处理 1 种字体。但是,BabelMap 实际上可能会扫描 PC 上的所有字体,所以它可能会做一些我想要的。无论如何,这些实用程序中的一个或两个在我的系统上都会很有价值,因此再次感谢您。我尝试使用字体的另一个方面基本上是通过编写代码来做我觉得有趣的事情来继续扩展我的 VBA 技能。
  • 在这种情况下,编写代码以提取我可以从 PC 上的字体中获取的任何信息(数据)。正如我在之前的一个回复中提到的,我最终设想最终得到一个电子表格,其中包含有关我的 Windows 10 PC 上所有字体的信息。这将涉及为每种字体设置多行,其中每行可能具有给定的代码点范围(即,给定的字体可以具有多个代码点范围)。
  • 我将结束这个问题,因为我得到的回复似乎表明没有 DWrite_1.dll 可用(或可能曾经存在),即使以下 Microsoft 网页在“需求,DLL”区域:docs.microsoft.com/en-us/windows/win32/api/dwrite_1/…。相反,我将重新打开一个关于编写 VBA7 代码以访问 IDWriteFont1 接口中的 GetUnicodeRanges 方法的 SO 问题(通过 DWrite.dll 中公开的 DWriteCreateFactory 函数)。
  • Peter - 最后,我还将尝试使用您关于 VBA、COM 和我开始研究的 DWriteCreateFactory 的讨论(并且可能对 REFIID iid 参数有挑战)。再次感谢。
  • RDan:嗯!那个 MSDN 页面是错误的。有一个dwrite_1.h文件,但真的从来没有一个dwrite_1.dll。
猜你喜欢
  • 2023-04-08
  • 2011-01-05
  • 2012-03-08
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
相关资源
最近更新 更多