powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблемы с RTTI
10 сообщений из 10, страница 1 из 1
Проблемы с RTTI
    #39646442
Задумчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть проект который писался под Delphi 10.2.3 и всё работает отлично.

Но когда в путях оказываются пробелы... То код начинает дохнуть.

К примеру первый вызов
Код: pascal
1.
ShowMessage(length(TRttiContext.Create.GetType(TForm).GetMethods).ToString);



Возвращает 188

А второй вызов, уже возвращает
raised exception class $C0000005 with message 'access violation at 0x0040dd74: read of address 0xfffffff7'.

Ошибка происходит при вызове GetMethods

Код: pascal
1.
2.
3.
4.
unit System; 
procedure _DynArrayAsg(var Dest: Pointer; Src: Pointer; TypeInfo: Pointer);
....
        CMP     dword ptr [EDX-8],0




Если я удаляю из путей пробелы То всё работает хорошо!

Реальный путь который работает
C:\Users\*\Desktop\regrth


Реальный путь который не работает
C:\Users\*\Desktop\regrth rthjt trhrtjty

С чем связанно не знаю.
...
Рейтинг: 0 / 0
Проблемы с RTTI
    #39646444
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QC (или как он там щас называется) знает про эту проблему?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблемы с RTTI
    #39646448
Задумчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,

Проблема была найдена!

Виновником стала регистрация классов TBCDBEditor && TBCEditor посредством RegisterClasses

Каким образом они ломают RTTI мне не понятно
...
Рейтинг: 0 / 0
Проблемы с RTTI
    #39646492
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виновник найден, но виновность его не доказана!!!
...
Рейтинг: 0 / 0
Проблемы с RTTI
    #39646529
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я предположу, что дело в контексте
Какие-то были проблемы с его повторным созданием без удаления
...
Рейтинг: 0 / 0
Проблемы с RTTI
    #39646557
Задумчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

Его виновность доказана ровно на том моменте, когда его нет в списке регистрации - всё работает как надо


[quot SOFT FOR YOU]Я предположу, что дело в контексте
Проверил такую возможность, даже класс скопировал с новым именем, и попробовал его зарегистрировать. Так же падает


Вот что в итоге



...
Рейтинг: 0 / 0
Проблемы с RTTI
    #39646581
Задумчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема начинает быть ещё на самом старте программы. Когда пытаешься объявить в верху


Код: pascal
1.
2.
3.
4.
  TBEditor22 = class(TBCCustomEditor)
  published

  end;



И его зарегистрировать.

Регистрация самого TBCCustomEditor проходит успешно, и работает как надо.

А вот создание унаследованного - ломает RTTI

Если вместо TBCCustomEditor написать любой другой класс, работает как надо

Странно что компилятор из другого юнита сразу не выдаёт ошибки
...
Рейтинг: 0 / 0
Проблемы с RTTI
    #39646596
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Регистрация самого TBCCustomEditor проходит успешно, и работает как надо.
А вот создание унаследованного - ломает RTTI
Неужеле ??? А TBCCustomEditor не унаследованный ?
...
Рейтинг: 0 / 0
Проблемы с RTTI
    #39646604
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое ощущение что вы ищите чёрную кошку в чёрной комнате, а она в соседней.
Где то портите память, а косяки вылезают здесь.
Да и код ваш работает
...
Рейтинг: 0 / 0
Проблемы с RTTI
    #39646620
Задумчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пришлось глубже нырнуть.


Нашёл что ошибка срабатывает при поиске класса, (При повторном поиске другого, не важно какого)
Код: pascal
1.
  Result := Rtti.GetType(FindTypeInfo(ClassName));



Но это кидает на AV и не больше.

Исправил на
Код: pascal
1.
  Result := TRttiContext.Create.GetType(FindTypeInfo(ClassName));



Теперь ошибка просиходит в System.Rtti функция TRttiPool.GetPackageList

Код: pascal
1.
2.
3.
  // You're playing with fire if you try to race package addition and removal
  // in particular against RTTI operations. Please don't do that.
  Result := FLatestPackageList;




Комментарии выше порадовал. Значит разработчики знают о этом баге
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблемы с RTTI
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]