Самый простой способ создать холст для рисования из DLL C ++? - PullRequest
1 голос
/ 10 апреля 2009

Сценарий таков: есть программа, которая загружает мой файл .dll / .so и вызывает из него функцию, возможно, несколько раз, каждый раз ожидая, что указатель на состояние будет другим. Это использует другие состояния позже в других вызовах в dll. (Это игровой ИИ, если вам нужен контекст; каждое состояние - это ИИ-игрок.)

Мне нужен кроссплатформенный способ создания окна холста для каждого из этих состояний (для визуализации, отладки и т. Д.). Я попробовал wx, но отложил его, так как это было непросто. совсем. Есть какие-нибудь аккуратные и маленькие библиотеки, которые могли бы сделать это, или я должен просто пойти с WinAPI / X ...?

Редактировать: Предположим, я не могу изменить хост-программу.

Ответы [ 3 ]

1 голос
/ 11 апреля 2009

Qt проще в настройке и управлении, чем Wx, по моему опыту. Это очень кроссплатформенный тоже.

Если вы хотите визуализировать некоторую графику из вашей DLL-функции без передачи указателей на объекты типа QImage или QWidget, возможно, вам стоит использовать OpenGL. Ваша DLL должна просто отображаться в текущий контекст OpenGL, который является глобальным состоянием и может быть просто установлен вне DLL (возможно, с использованием QGLWidget).

Обновление: Ах, я только что заметил, что ваше редактирование не может изменить код хоста. Это проблема: любые окна, которые вы создаете, действительно должны быть подключены к циклу событий хост-приложений, чтобы работать должным образом (например, получать WM_PAINT при отображении / изменении размера). В win32 для любого старого кода (например, вашей библиотеки), безусловно, возможно просто создать CreateWindow и рисовать его содержимое с помощью GDI всякий раз, когда у него появляется такая возможность, но общее поведение окна может быть довольно нарушенным (оно может вообще не работать с двойной буферизацией в Vista; Я не пробовал). Что я обычно нахожу в этой ситуации проще всего, так это просто выгружать файлы изображений и затем просматривать их с помощью программы просмотра изображений. ИМХО, это на самом деле более полезно для отладки, чем «живое» окно, потому что вы можете переходить назад и вперед, увеличивать масштаб изображения, применять улучшения изображения для выделения различных проблем, сравнивать с предыдущими прогонами для регрессионного тестирования и т. Д. (Если вы действительно хотите «живые» просмотры, напишите средство отображения изображений, которое отслеживает каталог для новых изображений, или передает их через именованный канал или что-то в этом роде.

0 голосов
/ 28 апреля 2009

Вы можете проверить IUP . Он очень хорошо взаимодействует с Lua и может использоваться целиком из библиотеки DLL расширения, поэтому представляется вероятным, что его C API можно использовать из библиотеки DLL, подключенной к чему-то еще.

IUP предоставит вам фреймворк для открытия окна, содержащего обычные подозрительные виды элементов управления, включая холст. Связанная с ним библиотека CD предоставит вам обычные операции рисования на этом холсте.

Текущие выпуски переносимы между Windows и * nix. Следующий основной выпуск также будет поддерживать MacOSX.

0 голосов
/ 11 апреля 2009

Если вам нужна простая графика, без виджетов, SDL очень прост в использовании. Если вам нужны сложные элементы управления, используйте Qt, как сказал Timday.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...