2012-05-03 2 views
2

Итак, я пишу программу Win32 на простом C, и она использует Direct2D для рисования. До сих пор все получилось хорошо, учитывая, что это мой первый крупный эксперимент с COM. Теперь я перейду к использованию DirectWrite для рендеринга шрифтов, но, похоже, есть дорожный блок. Хотя Direct2D и большинство других COM-объектов имеют отдельные интерфейсы, написанные для C и C++, DirectWrite имеет только интерфейсы C++ в заголовках Windows SDK. Я не знаю, является ли это надзором или целенаправленным решением, но похоже, что он должен хорошо работать на C, если ему будут предоставлены соответствующие C-дружественные заголовки. Я полагаю, что если я напишу свой собственный заголовок для DirectWrite, я должен быть в порядке.Проблемы с DirectWrite в plain C

Таким образом, это заставляет меня ответить на вопрос: как сделать код C++ для COM-интерфейса и преобразовать его в C-дружественный код? Я никогда не создавал COM-интерфейс сам, поэтому я не знаю, как написать для него собственный заголовок DirectWrite. Я попытался взглянуть на заголовки интерфейса C и C++ для Direct2D бок о бок для сравнения, но немного круто обернуть голову. Спасибо, ребята!

+2

Microsoft приняла решение лет назад, что Windows API не является C больше, а C++. И ни Direct2D, ни DirectWrite не являются реальным COM-интерфейсом COM API. – Lothar

ответ

2

Существует идеальный статья объясняет, как реализовать свои собственные классы COM в простом C

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

Тогда книга "Внутри COM" (Дейл Роджерсон, Microsoft Corp. Публикация: ISBN: 1-57231 -349-8) - замечательная ссылка для всей черной магии COM.

В принципе, вы получили хотя бы половину пути, так как используете Direct2D. DirectX и другие COM-заголовки автоматически генерируются, поэтому для использования DirectWrite вы можете просто определить, какие именно интерфейсы и методы вам нужны, и написать их вручную или с помощью простого синтаксического анализатора/генератора.

Смежные вопросы