Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> dll - требуется разъяснение, только ногами не бейте:) 
:(
    Опции темы
gonzales
Дата 27.12.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 13.3.2006

Репутация: 1
Всего: 2



Хочу создать систему плагинов, ознакомился с созданием библиотек, в принципе все понятно, но есть один вопрос:

мне нужно в плагине создать экземпляр класса и функцию, значение которой мне нужно возвращать в приложение.
Можно ли это сделать вообще и если можно, то подойдет ли такой алгорим:

1. Экспортирую функции из библиотеки: 
      Init - функция создания экземпляра класса устройства
      Open - функция доступа к устройству
      GetCode - функция возвращающая значение регистра устройства

2. В приложении вызываю функию Init - создается экземпляр класса из библиотеки (и держится в памяти)
3. В приложении вызываю Open - созданный наследник дает доступ к устройству
4. Запускаю таймер в приложении, по которому вызываю GetCode - который возвращает значение регистра устройства в приложение

Скажите, уважаемые, будет ли такая схема работать?

Это сообщение отредактировал(а) gonzales - 27.12.2006, 17:07
--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
PM MAIL   Вверх
Bose
Дата 27.12.2006, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



как всё сложно описано.
1. это будет работать
2. где создаётся экземпляр класса? в библиотеке!
3. какой наследник? кто-то умер? 
4. это будет работать, если будет написано правильно
PM MAIL WWW Skype   Вверх
gonzales
Дата 27.12.2006, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 13.3.2006

Репутация: 1
Всего: 2



может и сложно но зато понятно.

2. экземпляр создается в библиотеке
3. имеется в виду экземпляр

в общем если я все правильно понял - такая схема должна работать
--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
PM MAIL   Вверх
Bose
Дата 28.12.2006, 04:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(gonzales @  27.12.2006,  21:32 Найти цитируемый пост)
может и сложно но зато понятно.


непонятно. потому и написал что сложно smile 

Цитата(gonzales @  27.12.2006,  21:32 Найти цитируемый пост)
в общем если я все правильно понял - такая схема должна работать

должна. при парочке условий:
1) приложение ничего не узнает об экземпляре класса в плагине(если это Длл)
2) функции Init, Open и GetCode - должны быть действительно функциями(а не методами). Желательно с директивой stdcall;
PM MAIL WWW Skype   Вверх
MetalFan
Дата 28.12.2006, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



а "экземпляр класса" где убиваться будет? нельзя вроде как из библиотеки делфевые классы(экземпляры) передавать


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
gonzales
Дата 28.12.2006, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 13.3.2006

Репутация: 1
Всего: 2



да, приложению этот экземпляр класса до лампады - ему главное получать значение GEtCode, а убиваться он будет при закрытии библиотеки


 

Это сообщение отредактировал(а) gonzales - 28.12.2006, 12:39
--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
PM MAIL   Вверх
gonzales
Дата 28.12.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 13.3.2006

Репутация: 1
Всего: 2



один вопрос: 
не могу понять, почему не работает???

пишу в библиотеке функцию
Код

function Open(i:word):word;
begin
result:=i;
end;


в основной программе
Код

@Open := GetProcAddress(handle,'Open');
 if @Open <> nil then
    i:=Open(1);


получаю i=2456 и следом Acsess Violation

разобрался, все дело было в том, что я писал function Open(i:word):word; stdcall;

без него все работате

Это сообщение отредактировал(а) gonzales - 28.12.2006, 13:27
--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.