Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Что за... сообщение в Delphi XE2.   Найти похожие ветки 

 
Deltas ©   (2012-02-15 01:55) [0]

В конструкторе класса, одно из полей которого типа FIcon: TIcon, в отладке пытаюсь просмотреть значение выражения FIcon is TIcon. Компилятор сообщает: "E2010 Incompatible types: "Vcl.Graphics.TIcon" and "Vcl.Graphics.TIcon"". Что бы это могло значить?...


 
Dimka Maslov ©   (2012-02-15 09:29) [1]

В отладке компилятор уже ничего сообщать не может. Сообщает отладчик.


 
brother ©   (2012-02-15 10:27) [2]

не понял, где и что смотришь? этого не может быть, тк этого не может быть)


 
Deltas ©   (2012-02-15 11:10) [3]

Ctrl + F7. Вызывается окно просмотра/изменения значений переменных. В нем и просматриваю значение FIcon is TIcon.

P.S. Использую пакеты *.bpl. В пакете есть экспортируемая функция
function GetModuleInfo: IModuleInfo
...
IModuleInfo = interface(IInterface)
 ...
 property Icon: TIcon read GetIcon;
 ...
end;

Вызываю из главного модуля *.exe функцию GetModuleInfo одно из bpl. И при просмотре значения ModuleInfo.Icon is TIcon получаю вот такое странное сообщение отладчика.


 
депутатъ   (2012-02-15 11:32) [4]

FIcon.ClassName = "TIcon" не подойдёт?


 
Dimka Maslov ©   (2012-02-15 11:45) [5]

В bpl и exe классы формально разные. Потому что эта информация своя для каждого модуля. Отсюда мораль - не надо использовать bpl. Никакой практической выгоды от них нет.


 
CRLF   (2012-02-15 11:48) [6]

Галка "Build with runtime packages" стоит?


 
Deltas ©   (2012-02-15 13:00) [7]


> FIcon.ClassName = "TIcon" не подойдёт?

Так, конечно, можно, но проблема то глубже :) Напрмиер, метод TIcon.Assign(Source: TPersistent) не выполнится, т.к. в нем есть проверка if (Source is TIcon). И, несмотря на то, что я передаю параметром класс TIcon, Source is TIcon возвращает False.


> Галка "Build with runtime packages" стоит?


В том то и дело, что не нужно мне "build with runtime packages", пакеты должны подключаться динамически (при определенных действиях пользователя) в процессе работы приложения. Когда пакеты встраиваются в исполняемый файл, то, конечно, никаких проблем не возникает.


 
icWasya ©   (2012-02-15 13:33) [8]

Так вот галка "Build with runtime packages" ставится тогда, когда нужно использовать пакеты как внешние DLL, а когда эта галка снята, все пакеты линкуются к EXEшнику. Поэтому вопрос CRLF   (15.02.12 11:48) [6]
Галка "Build with runtime packages" стоит?
всё ещё прояснён.


 
Deltas ©   (2012-02-15 13:47) [9]

Галка стоит. Но некоторые пакеты подключается динамически, через LoadPackage


 
Плохиш ©   (2012-02-15 14:49) [10]


> Компилятор сообщает: "E2010 Incompatible types: "Vcl.Graphics.
> TIcon" and "Vcl.Graphics.TIcon"". Что бы это могло значить?

То, что это два разных класса, один описан в вызывающем exe, а другой описан в вызываемой библиотеке.


 
Поток   (2012-02-15 15:29) [11]

> Deltas ©   (15.02.12 13:47) [9]
А у динамически подключаемых пакетов галка тоже стоит?


 
CRLF   (2012-02-15 16:00) [12]


> А у динамически подключаемых пакетов галка тоже стоит?
У них такой галки нет, у них она всегда включена.


> Галка стоит. Но некоторые пакеты подключается динамически,
>  через LoadPackage
Ну вот тебе надо поставить галку, и под ней в список runtime packages вписать как минимум rtl, vcl и твой пакет.


 
Deltas ©   (2012-02-15 16:20) [13]


> То, что это два разных класса, один описан в вызывающем
> exe, а другой описан в вызываемой библиотеке.

Это один и тот же класс, описанный в Vcl.Graphics, который входит в пакет vcl.bpl. Но, похоже, для них формируется различная RTTI.

> А у динамически подключаемых пакетов галка тоже стоит?

У пакетов невозможно выставить эту опцию, т.к. пакеты никогда не встраиваются в другие пакеты, они их подгружают (секция Requires).

> Ну вот тебе надо поставить галку, и под ней в список runtime
> packages вписать как минимум rtl, vcl и твой пакет.

Это решит проблему, но цель учебной задачи не встраивать пакеты в исполняемый файл, а подгружать через LoadPackage по требованию. Если у меня 100 пакетов, но пользователь реально будет работать только с одним сегодня, зачем грузить в оперативную память 100 пакетов?


 
Anatoly Podgoretsky ©   (2012-02-15 16:32) [14]

> Deltas  (15.02.2012 16:20:13)  [13]

Почему ты думаешь, что програма будет что то грузить в оперативную память,
это не ее уровень.


 
Inovet ©   (2012-02-15 16:35) [15]

> [13] Deltas ©   (15.02.12 16:20)
> зачем грузить в оперативную память 100 пакетов?

И сам exe файл тоже не весь грузится, а по мере надобности, и выгружается за ненадобностью.


 
Германн ©   (2012-02-15 16:35) [16]


> но цель учебной задачи не встраивать пакеты в исполняемый
> файл, а подгружать через LoadPackage по требованию.

Ну и получай тогда
> для них формируется различная RTTI.


 
Плохиш ©   (2012-02-15 16:44) [17]


> Это решит проблему, но цель учебной задачи не встраивать
> пакеты в исполняемый файл, а подгружать через LoadPackage
> по требованию. Если у меня 100 пакетов, но пользователь
> реально будет работать только с одним сегодня, зачем грузить
> в оперативную память 100 пакетов?

Ещё один вместо изучения основ делает кривой велосипед...


 
Германн ©   (2012-02-15 16:45) [18]


> Это решит проблему, но цель учебной задачи не встраивать
> пакеты в исполняемый файл, а подгружать через LoadPackage
> по требованию. Если у меня 100 пакетов, но пользователь
> реально будет работать только с одним сегодня, зачем грузить
> в оперативную память 100 пакетов?

Ты бы почитал бы про эту галку  "Build with runtime packages". А то похоже ты её совсем неправильно понял.


 
app ©   (2012-02-15 17:01) [19]

Он не слышал, что такое виртуальная память. И как ведется управление оперативной памятью.


 
Германн ©   (2012-02-15 17:06) [20]


> Он не слышал, что такое виртуальная память.

Дело не в этом, а в том что по мнению автора если включить галку, то это будет означать "встраивать пакеты в исполняемый файл".


 
CRLF   (2012-02-15 17:11) [21]


> Это решит проблему, но цель учебной задачи не встраивать
> пакеты в исполняемый файл, а подгружать через LoadPackage
> по требованию.
И ч0?


> Если у меня 100 пакетов, но пользователь реально будет работать
> только с одним сегодня, зачем грузить в оперативную память
> 100 пакетов?
Я разве где-то такое предлагал?


 
Deltas ©   (2012-02-15 17:51) [22]


> Дело не в этом, а в том что по мнению автора если включить
> галку, то это будет означать "встраивать пакеты в исполняемый
> файл".

Если флажок снят, весь код пакетов встраивается в исполняемый файл. В чем я тут не прав?


 
CRLF   (2012-02-15 17:55) [23]


> Если флажок снят, весь код пакетов встраивается в исполняемый
> файл. В чем я тут не прав?
Прав. Следовательно, чтобы динамически загружать пакет, галочка должна быть установлена? Чтобы динамически загружать пакет, этот пакет должен быть в списке "невкомпиливаемых" пакетов? Ну и rtl и vcl тоже должны быть в этом списке.


 
Германн ©   (2012-02-15 18:08) [24]


> Если флажок снят, весь код пакетов встраивается в исполняемый
> файл. В чем я тут не прав?
>

Так тебе то советуют флажок поставить, а не снять!


 
Deltas ©   (2012-02-15 18:11) [25]

Понятно. Еще один вопрос есть. В списке runtime-пакетов можно оставить только <мой пакет>.bpl, чтобы rtl.bpl и vcl.bpl встроились в приложение? Почему там обязательно должны находиться vcl.bpl и rtl.bpl?


 
CRLF   (2012-02-15 18:28) [26]


> В списке runtime-пакетов можно оставить только <мой пакет>.
> bpl, чтобы rtl.bpl и vcl.bpl встроились в приложение?
Получится именно Incompatible types: "Vcl.Graphics.TIcon" and "Vcl.Graphics.TIcon"". В приложении Graphics.TIcon у тебя будет из вкомпиленного vcl, а у пакета -- из загружаемого vcl.bpl (обрати внимание, что у тебя фактически две копии vcl в памяти, и как ты уже заметил выше, RTTI у них разные).


 
Германн ©   (2012-02-15 18:30) [27]

А <мой пакет>.bpl вовсе там не нужен для такой задачи.


 
Deltas ©   (2012-02-15 18:36) [28]

Хорошо, спасибо большое


 
CRLF   (2012-02-15 18:53) [29]


> А <мой пакет>.bpl вовсе там не нужен для такой задачи.
Так задача учебная, таковы условия :-)



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.053 c
15-1346349689
alexdn
2012-08-30 22:01
2013.03.22
Теория чисел


2-1340908025
sas9568635
2012-06-28 22:27
2013.03.22
Пишу проект с реализацией команд КР580ВМ80А, которые в виде проце


15-1352393568
Stiduntss
2012-11-08 20:52
2013.03.22
Запросы к сайту


15-1354134606
Юрий
2012-11-29 00:30
2013.03.22
С днем рождения ! 29 ноября 2012 четверг


15-1346949003
Опять я
2012-09-06 20:30
2013.03.22
Вопрос по Яндекс-почте.