![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы с абстрактными методами [D7, Win2k]
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 'Тестовый';
ты б еще на японском написал