Проблема следующая. Создаем главное приложение
| Код | ... begin // поиск всех плагинов mask:=pathfodll+'*.dll'; found:=FindFirst(mask,faAnyFile,SF); while found=0 do begin if SF.Name<>debug_plugin then begin DLLHandle:=LoadLibrary(PChar(pathfodll+SF.Name)); @reg:=GetProcAddress(DLLHandle,'Register'); if Assigned(reg) then begin currdll:=reg(); currdll._Interface:=PForm(self_link); currdll._App:=_Application; currdll.DoCreate(); if Assigned(currdll) then begin ListOfCommand.Add(currdll.commandname); ListDLL.AddObject(inttostr(DLLHandle),Pointer(currdll)); end; end; end; Found:=FindNext(SF); end; FindClose(SF.FindHandle); end; ...
|
И создадим DLL (в ней форма с TICQlib)
| Код | ... type TForm1 = class(TForm) client: TICQClient; bt_connect: TButton; procedure bt_connectClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.bt_connectClick(Sender: TObject); begin client.Password:='***'; client.UIN:=0; client.Login(); end; ... //ну и естественно 2 export - reg() and unreg() // Пусть будет класс, который создается при reg() // содержит поля - _Interface - указатель на гл.форму _App - указатель на Application гл.формы
|
И в коде DLL функция класса Work .DoCreate(); делает что-то подобное
| Код | function Work.DoCreate(); begin form1_unit.SetApplication(_App); form1_unit.form1:=TForm1.Create(_App); end; //освобождается форма сама, при закрытии главной программы
|
Все это дело скомпилим. Окей. Запустим. Найдет она dll-ку. прикрутит к главной программе. откроется форма из dll тыкаем на кнопочку bt_connect (далее я смотрел соединение через OutposFirewall ) - появляется соединение длящееся 10-15 секунд и передавающее 10 байт.
P.S. Сам Outpost выключен. Как побороть?
|