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

Вниз

Проблемы с абстрактными методами   Найти похожие ветки 

 
NewDelpher ©   (2004-10-05 14:37) [0]

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

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 при обращении к ней... Что я неправильно делаю?


 
KSergey ©   (2004-10-05 14:52) [1]

Боюсь проблема совершенно в другом месте, надо подробнее смотреть что там и как.

Уберите все эти иерархии - боюсь, проблема останется. Не там роете, по-моему.


 
KSergey ©   (2004-10-05 14:52) [2]

Думаю ключевые слова "но  стоит только поместить эту procedure test в DLL-шку".


 
Суслик ©   (2004-10-05 14:58) [3]

sharemem в uses есть?


 
NewDelpher ©   (2004-10-05 15:02) [4]


> KSergey ©   (05.10.04 14:52) [2]
> Думаю ключевые слова "но  стоит только поместить эту procedure
> test в DLL-шку".

вот код из DLL:

lybrary dll_pro;
uses LybraryClass; // это модуль, который абстрактный класс содержит
procedure test(Cl: TClassAb); export;
begin
 Cl.my_method;
end;
exports test name "Тестовый";
begin
end.
/CODE>
Вроде ничего криминального...


 
NewDelpher ©   (2004-10-05 15:03) [5]


> Суслик ©   (05.10.04 14:58) [3]
> sharemem в uses есть?

нет, а что?


 
KSergey ©   (2004-10-05 15:06) [6]

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

> [5] NewDelpher ©   (05.10.04 15:03)
> > Суслик ©   (05.10.04 14:58) [3]
> > sharemem в uses есть?
> нет, а что?

Читаем комментарии к проекту dll, вот что ;)
Хотя пока об этом рано еще говорить, может и не в том дело


 
WondeRu ©   (2004-10-05 15:12) [7]

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

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


 
WondeRu ©   (2004-10-05 15:16) [8]

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


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


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


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


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


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

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


 
NewDelpher ©   (2004-10-05 15:23) [11]


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

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


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


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

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


 
WondeRu ©   (2004-10-05 15:37) [13]

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

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


 
NewDelpher ©   (2004-10-05 15:46) [14]


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

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


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

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


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

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


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


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

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


 
Anatoly Podgoretsky ©   (2004-10-05 17:02) [18]

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


 
NewDelpher ©   (2004-10-05 17:07) [19]


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

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


 
WondeRu ©   (2004-10-05 17:08) [20]

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


 
NewDelpher ©   (2004-10-05 17:16) [21]

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

> uses ShareMem, LybraryClass;

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


 
NewDelpher ©   (2004-10-05 17:34) [22]

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


 
KSergey ©   (2004-10-06 15:31) [23]

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

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

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


 
Erik1 ©   (2004-10-06 16:38) [24]

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


 
WondeRu ©   (2004-10-08 17:57) [25]

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

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


 
jack128 ©   (2004-10-08 18:45) [26]

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



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

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

Наверх




Память: 0.53 MB
Время: 0.048 c
8-1090840405
sash
2004-07-26 15:13
2004.10.24
3D в Delphi


3-1096211392
ksan
2004-09-26 19:09
2004.10.24
объектные БД


14-1096651198
quickblack
2004-10-01 21:19
2004.10.24
Кто знает, когда выйдет новый виндоус


1-1097139583
Andrey_
2004-10-07 12:59
2004.10.24
очистка image.picture


14-1097153989
pasha_golub
2004-10-07 16:59
2004.10.24
Музыка народов (Севера... :0))) )