Direct2D только частично связывает в C++ Builder

У меня есть проект C++ Builder (Rad Studio Berlin) для использования Direct2d. Отрисовка холста прекрасно работает с TDirect2DCanvas, который указывает, что Direct2D правильно связывается. Все рендерит гладко. Однако мне нужно использовать матрицу. Я получаю сообщение об ошибке при попытке. Например, когда я пытаюсь:

canvas->RenderTarget->SetTransform(D2D1::Matrix3x2F::Rotation(15.0, D2D1PointF(100, 100)));

... я получаю следующую ошибку связывания:

[ilink32 Error] Error: Unresolved external 'D2D1MakeRotateMatrix' referenced from C:\DP\TRUNK\SRC\CLIENTSIDE\APPLICATIONS\VIEWER\WIN32\DEBUG\MIMAGE.OBJ

Предполагалось, что C++ Builder уже настроен для связи с Direct2D, если я просто включу заголовки. Может ли кто-нибудь помочь мне ссылаться на соответствующие файлы в C++ Builder?

1 ответ

Я нашел решение из другого источника. Вот:

После некоторых исследований эта проблема не была признана ошибкой.

Для многих стандартных функций API Windows среда IDE автоматически добавит правильную библиотеку, чтобы зависимости от ссылок на функции были удовлетворены. В DirectX (который используется несколько редко) среда IDE не предоставляет автоматически библиотеку, которая соответствует заголовочному файлу, поэтому это вызывает неразрешенные ошибки компоновщика.

Решение заключается в том, чтобы либо (как я уже упоминал ранее) добавить D2D1.lib в проект, либо статически ссылаться на него в коде:

// as long as D2D1.lib is on the library search path, it should be found
#pragma comment(lib,"D2D1.lib")

Некоторые разработчики добавляют вышеупомянутую строку кода к своим заголовкам, и все, что вам нужно сделать, это включить заголовок, и все хорошо... команда DirectX не сделала этого и, следовательно, неразрешенные ошибки компоновщика.

Надеюсь, что это проясняет проблему,

Другие вопросы по тегам