![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Форумчанин
Регистрация: 24.07.2008
Сообщений: 279
|
![]()
Потому что такие фокусы с классами в dll не работают. Тебе же дали ссылку на статью в КД, ты ее читал?
Сказал и загрустил от бесспорности своей правоты.
|
![]() |
![]() |
![]() |
#12 | |
Форумчанин
Регистрация: 06.01.2009
Сообщений: 340
|
![]() Цитата:
http://www.delphikingdom.com/asp/ans...IDAnswer=68178 Поможет вот это: Код:
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник". |
|
![]() |
![]() |
![]() |
#13 | |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
![]() Цитата:
Код:
Код:
Один чувак сказал, что надо shareMem, я поставил его в dpr-ках dll и exe gthdsv модулем в uses, только толку я не замечаю с него |
|
![]() |
![]() |
![]() |
#14 | ||
Форумчанин
Регистрация: 06.01.2009
Сообщений: 340
|
![]() Цитата:
Если интересно, подробнее можно прочитать здесь: http://www.cyberguru.ru/programming/...ils-page8.html Цитата:
Код:
Как определяется тип? Разберемся, как работает механизм определения принадлежности объекта (Obj) к заданному классу (AClass). В любом объекте есть указатель на VMT (таблица виртуальных методов). В этой таблице есть указатель на класс к которому пренадлежит данный объект (vmtSelfPtr) и указатель на класс предок (vmtParent). Т.е. если указатель vmtSelfPtr равен указателю AClass, это значит что объект является экземпляром класс AClass. Если один из указателей vmtParent (текущего класса, класса потомка и т.д.) равен указателю AClass, это значит, что класс объекта является потомком класса AClass. Почему же типы различны? Разберемся, что происходит при запуске программы. В сегмент данных загружается информация об используемых в программе типах (классах, их потомках и прочее). В нашем случае есть участок памяти в котором хранится информация о классе TStringList. (TStringList по сути есть указатель на этот участок памяти) При загрузке dll в ней тоже описаны типы (классы и прочее), они загружаются в свой сегмент данных, т.е. dll будет содержать свой участок памяти в котором описан класс TStringList. Получается, что мы имеем два участка памяти, содержащих одно и тоже описание класса TStringList. По сути TStringList из exe и TStringList из dll это одно и тоже (копии), но формально, если сравнить указатели на классы и проследить потомков – это разные классы, имеющие каждый свою иерархию наследования. Поэтому и вылетает исплючение. Теперь по коду, при вызове: Код:
Код:
P.S. Как же все таки заставить данный код работать? Теоретически все просто. Если создавать все объекты в одном месте, допустим в dll (или в exe), то они будут иметь единую иерархию наследования, и все будет работать. Например, можно создать ComboBox в exe-файле, затем передать его в dll и разместить на форме, в таком случае, данный код будет работать т.к. TStringList был создан так же в exe-файле. Но, на практике не все так просто. Потребуется существенное переписывание программы, некоторые элементы возможно вообще не получится переделать.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник". |
||
![]() |
![]() |
![]() |
#15 |
Форумчанин
Регистрация: 24.07.2008
Сообщений: 279
|
![]()
В случаях с Combobox, ListBox все банально решается через SendMessage();
Сказал и загрустил от бесспорности своей правоты.
|
![]() |
![]() |
![]() |
#16 |
Форумчанин
Регистрация: 21.07.2008
Сообщений: 192
|
![]() |
![]() |
![]() |
![]() |
#17 |
Форумчанин
Регистрация: 24.07.2008
Сообщений: 279
|
![]()
Почитать первую строку:
Код:
Сказал и загрустил от бесспорности своей правоты.
Последний раз редактировалось 0nni; 24.07.2009 в 22:11. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при компиляции | MasterofCDM | Общие вопросы Delphi | 2 | 11.11.2008 09:35 |
Ошибка при отключении ОС | GREK | Операционные системы общие вопросы | 1 | 24.09.2008 16:50 |
Ошибка при удалении... | JRcoker | Общие вопросы Delphi | 8 | 29.07.2008 22:53 |
Ошибка при присваивании | NeiL | Общие вопросы Delphi | 5 | 16.04.2008 22:24 |
Ошибка при компиляции | zak | Общие вопросы C/C++ | 2 | 11.12.2007 18:24 |