Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемы с абстрактными методами [D7, Win2k]


Страницы:   1 2

NewDelpher ©   (2004-10-05 14:37:00) 

есть у меня класс

TClassAb = class
public
 procedure my_method; dynamic; abstract;
end;

есть его наследник:

TMyClass = class(TClassAb)
public
 procedure my_method; override;
end;


есть процедура:

procedure test(cl: TClassAb);
begin
 cl.my_method;
end;


и объект:

var MyClass: TMyClass


Когда делаю вызов в модуле test(MyClass) всё замечательно работает, но  стоит только поместить эту procedure testв DLL-шку происходит AV при обращении к ней... Что я неправильно делаю?


jack128   (2004-10-08 18:45:00) [1]

WondeRu ©   (08.10.04 17:57) [25]
или bpl


WondeRu   (2004-10-08 17:57:00) [2]

Erik1 ©   (06.10.04 16:38) [24]
Просто примерись с этим

и используй интерфейсы


Erik1   (2004-10-06 16:38:00) [3]

Насколько я помню TClassAb в Dll и в основной программе будут разные классы. Так что передавать сылки на объект плохой тон. Просто примерись с этим, даже судба против такого стиля програмирования.


KSergey   (2004-10-06 15:31:00) [4]

> NewDelpher ©   (05.10.04 15:46) [14]
> проверил, действительно, почему-то nil, хотя я же передаю
> объект в параметре
.

Честное слово, сильные сомнения по поводу выделенного. Все равно передается указатель, если уж он есть - то он передасться. И никакая ShareMem тут ни при чем, по-моему.

В коде ошибка. Проверьте в хост-приложении значение той перемнной, что передается в dll перед самым вызовом test.


NewDelpher   (2004-10-05 17:34:00) [5]

с этим ShareMem не надо ничего делать?


NewDelpher   (2004-10-05 17:16:00) [6]

это тот комментарий, что DLL-Wizard вставляет? Прочитал.

> uses ShareMem, LybraryClass;

сделал, все равно nil


WondeRu   (2004-10-05 17:08:00) [7]

Anatoly Podgoretsky ©   (05.10.04 17:02) [18]
ээээ , ну да
uses ShareMem, LybraryClass;


NewDelpher   (2004-10-05 17:07:00) [8]


> Anatoly Podgoretsky ©   (05.10.04 17:02) [18]

Извините за ламерство, но не подскажете ли ВЫ что это за комментарий и где его прочесть?


Anatoly Podgoretsky   (2004-10-05 17:02:00) [9]

NewDelpher ©   (05.10.04 16:58) [17]
А ничего, это по определению работать не будет.
Лучше прочитай комментарий, который Дельфи тебе вставило в ДЛЛ и следуй ему.


NewDelpher   (2004-10-05 16:58:00) [10]


> WondeRu ©   (05.10.04 16:51) [16]
> попробуй
> uses LybraryClass, ShareMem;

подключил, и что надо с ней делать?


WondeRu   (2004-10-05 16:51:00) [11]

попробуй
uses LybraryClass, ShareMem;


NewDelpher   (2004-10-05 16:05:00) [12]

Получается объект невозможно передать параметром в Dll?


NewDelpher   (2004-10-05 15:46:00) [13]


> проверь в длл, чему равен Cl, думаю что nil
>
> вставь проверку:
> if assigned(cl) then cl.my_method

проверил, действительно, почему-то nil, хотя я же передаю объект в параметре.


WondeRu   (2004-10-05 15:37:00) [14]

проверь в длл, чему равен Cl, думаю что nil

вставь проверку:
if assigned(cl) then cl.my_method


NewDelpher   (2004-10-05 15:24:00) [15]


> NewDelpher ©   (05.10.04 15:23) [11]

имел ввиду, что не от этого ошибка


NewDelpher   (2004-10-05 15:23:00) [16]


> WondeRu ©   (05.10.04 15:12) [7]
> NewDelpher ©   (05.10.04 15:02) [4]
> exports test name 'Тестовый';
> ты б еще на японском написал

С русскими буквами всё работает. Написал на англицком - всё равно не помогло.


NewDelpher   (2004-10-05 15:21:00) [17]


> Вообще экземпляры объектов, конечно, лучше бы не передавать...
> К стати, что в этом my_method? Более того, если пустить
> в отладчике - рубится прямо на вызове или все же внутри
> метода? Надо бы уточнить...

процедура Test начинает выполняться, но рубится при вызове Cl.my_method:
"Неизвестное программное исключение"


Суслик   (2004-10-05 15:18:00) [18]


>  [6] KSergey ©   (05.10.04 15:06)
> Читаем комментарии к проекту dll, вот что ;)
> Хотя пока об этом рано еще говорить, может и не в том дело


просто это самая встречающаяся ошибка :)) вот и предположил


WondeRu   (2004-10-05 15:16:00) [19]

соглашусь с [6], нужно в таких случаях применять интерфейсы


WondeRu   (2004-10-05 15:12:00) [20]

NewDelpher ©   (05.10.04 15:02) [4]
exports test name 'Тестовый';

ты б еще на японском написал


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо