Главная страница
    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.5 MB
Время: 0.035 c
3-1096281014
Леонид
2004-09-27 14:30
2004.10.24
Не удается проапдейтить запись БД-access


4-1095093283
ipnet
2004-09-13 20:34
2004.10.24
Как поменять цвет текста у метки ?


3-1095744487
Fishka
2004-09-21 09:28
2004.10.24
Level DBF-файлов 5 и 7 - какое это имеет значение?


1-1097152691
sergg
2004-10-07 16:38
2004.10.24
Свойства КомбоБокс


6-1092291016
RomanAD
2004-08-12 10:10
2004.10.24
Подключение к Active Directory





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский