Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Что за... сообщение в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 3.48 c
2-1336143614
prodex
2012-05-04 19:00
2013.03.22
Событие окончания передачи по TCP в winsock


15-1352816692
Очень Злой
2012-11-13 18:24
2013.03.22
Как в WinXP сменить сочетание клавиш для переключения раскладки?


2-1334303031
rikitiki2012
2012-04-13 11:43
2013.03.22
Realtex


15-1351865113
TObject
2012-11-02 18:05
2013.03.22
DBGrid


15-1350838886
Лида
2012-10-21 21:01
2013.03.22
Обработка различных событий в Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский