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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка события компонента в DLL, Как обработать событие компонента в DLL? 
:(
    Опции темы
Elfix
Дата 6.3.2007, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

library Project2;

uses
  SysUtils, Classes, IdIRC, Windows;

type
 TIRCBot = class(TObject)
  private
   IRC: TIdIRC;
  public
   constructor Create;
   procedure Connect;
   procedure OnMessageIRC(Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; Content: String);
   destructor Free;
 end;

{ TIRCBot }

var
 IRCBot: TIRCBot;

procedure TIRCBot.OnMessageIRC(Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; Content: String);
begin
 IRC.Say(AChannel.Name, Content);
end;

procedure TIRCBot.Connect;
begin
 if not IRC.Connected then
  IRC.Connect();
 IRC.Join('#testing');
end;

constructor TIRCBot.Create;
begin
 IRC:=TIdIRC.Create(nil);
 IRC.Host:='irc.cyber-net.ru';
 IRC.Port:=6669;
 IRC.Nick:='flooder';
 IRC.AltNick:='Buka';
 IRC.RealName:='Vicka';
 IRC.Username:='Vikusya';
 IRC.OnMessage:=OnMessageIRC;
end;

destructor TIRCBot.Free;
begin
 if IRC.Connected then
  IRC.Disconnect();
 IRC.Free;
end;

function StartProc: Boolean; stdcall;
begin
 IRCBot:=TIRCBot.Create;
 IRCBot.Connect;
 Result:=False;
end;

procedure StopProc; stdcall;
begin
 IRCBot.Free;
end;

exports
 StartProc name 'StartProc',
 StopProc name 'StopProc';

begin
end.
Событие OnMessageIRC никогда не происходит. С чем это может быть связано? Как решить проблему?
Пробовал так же создать компонент на форме, так же инициализировать, так же заходить на канал и назначить процедуру обработки OnMessageIRC, там все работает. А из библиотеки не хочет.
PM MAIL   Вверх
MetalFan
Дата 7.3.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



возможно до компонента не доходят виндовые сообщения.
если экземпляр этого класса создается в приложении, то все работает нормально?

Это сообщение отредактировал(а) MetalFan - 7.3.2007, 09:35


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


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 19
Всего: 95



MetalFan дал практически точную подсказку... Имхо, дело в том, что dll имеет свой собственный стек данных, никак не связанный со стеком данных приложения. И хотя контекст библиотеки исполняется в контексте приложения, но, насколько я понимаю, при создании экземпляра класса он не ставится с очередь на прием сообщений как раз потому что он находится в другом сегменте данных, куда главное приложение не имеет доступа. А своей очереди сообщений библиотека не имеет... Едиственный момент - насколько я помню, Delphi не умеет из dll экспортировать классы (только функции), поэтому создать экземпляр класса, объявленного в dll не получится. Я бы просто оставил это дело в основном приложении и не заморачивался с dll...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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