2009-03-09 5 views
0

Я пытаюсь написать простой компонент, который позволит вам встроить одну или несколько поверхностей рендеринга SDL в окно Delphi с использованием API SDL 1.3. Он будет компилироваться и устанавливаться просто отлично, но когда я пытаюсь использовать компонент в конструкторе форм, он поднимает AV-файлы, когда я пытаюсь получить доступ к его свойствам в инспекторе объектов, сохранить форму или удалить компонент и поместить его на форма, а затем попытка запустить дает ошибку компоновщика: он, по-видимому, не может правильно прочитать DFM по любой причине.Почему мой пользовательский компонент поднимает AV в среде IDE?

DLL можно найти по адресу http://www.libsdl.org/tmp/SDL-1.3-dll.zip, а исходный код для моего компонента можно загрузить here. SDL.pas - это заголовочный файл JEDI-SDL; остальное - мой собственный код.

Я не вижу причин для этого, чтобы поднять AVs в дизайнере формы. Если я динамически создаю элемент управления во время выполнения, у меня нет проблем с стабильностью. Может ли кто-нибудь взглянуть на это и, возможно, предоставить некоторые отзывы, которые могут помочь мне разобраться?

ответ

14

Вы можете отлаживать это самостоятельно. Откройте проект пакета, содержащий ваш компонент. Затем перейдите в Run | Parameters и введите IDE в качестве Host Application. Запустите IDE из среды IDE. Затем повторите шаги, чтобы воспроизвести AV, и среда IDE должна остановиться и показать вам, где что-то происходит. Оттуда вы можете использовать обычные методы отладки.

+0

OK. Проблема исчезает, когда я удаляю свойство Flags из опубликованного раздела. IDE задыхается, когда пытается найти RTTI для определения базового набора. Я запускаю Delphi 2009 со всеми установленными обновлениями. Это второй случай, который я нашел плохого RTTI в '09. Я поставлю его в КК. –

+0

Как объявлен набор? Сколько элементов в наборе? Вы можете публиковать только наборы, содержащие только до 32 элементов. –

+0

TSdlWindowFlags = набор (sdlwFullscreen, sdlwOpenGl, sdlwShown, sdlwBorderless, sdlwResizable, sdlwMinimized, sdlwMaximized, sdlwInputGrabbed, dslwInputFocus, sdlwMouseFocus, sdwlForeign, sdlwForce32 = 31); 12 элементов в перечислении, обработанные, поэтому я могу передать его подпрограмме C, ожидающей «int». –