【问题标题】:Problems with DirectWrite in plain C纯 C 中 DirectWrite 的问题
【发布时间】:2012-05-04 07:43:36
【问题描述】:

所以我正在用纯 C 语言编写一个 Win32 程序,它使用 Direct2D 进行绘图。到目前为止,考虑到这是我对 COM 的第一次重大实验,一切都很好。我现在开始使用 DirectWrite 进行字体渲染,但似乎存在障碍。尽管 Direct2D 和大多数其他 COM 对象具有为 C 和 C++ 编写的单独接口,但 DirectWrite 仅在 Windows SDK 标头中具有 C++ 接口。我不知道这是一个疏忽还是有目的的决定,但如果给定适当的 C 友好标头,它似乎应该在 C 中正常工作。我想如果我为 DirectWrite 编写自己的标题,我应该没问题。

所以这让我想到了问题的核心:如何将 C++ 风格的代码用于 COM 接口并将其转换为 C 友好的代码?我自己从未创建过 COM 接口,所以我不知道如何为它编写自己的 DirectWrite 标头。我尝试并排查看 Direct2D 的 C 和 C++ 接口标头以进行比较,但我有点难以理解。谢谢各位!

【问题讨论】:

  • 微软多年前就做出决定,Windows API 不再是 C,而是 C++。而且 Direct2D 和 DirectWrite 都不是真正的 COM API 的唯一 COM 类。

标签: c com


【解决方案1】:

有一篇完美的文章解释了如何用纯 C 实现你自己的 COM 类

http://www.codeproject.com/Articles/13601/COM-in-plain-C

那么“Inside COM”一书(Dale Rogerson,Microsoft Corp. 出版:ISBN:1-57231-349-8)是所有 COM 魔法的绝妙参考。

基本上,自从您使用 Direct2D 以来,您至少已经完成了一半。 DirectX 和其他 COM 标头是自动生成的,因此要使用 DirectWrite,您可能只需弄清楚您需要哪些确切的接口和方法,然后手动或使用一些简单的解析器/生成器来编写它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 2013-02-26
    • 2011-04-17
    • 1970-01-01
    • 2019-11-23
    • 2010-11-13
    • 1970-01-01
    • 2020-12-13
    相关资源
    最近更新 更多