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 не сделала этого и, следовательно, неразрешенные ошибки компоновщика.
Надеюсь, что это проясняет проблему,