Воскресенье, 22.12.2024, 11:52 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: xXxSh@dowxXx, Anton93, Волк-1024  
Работу класса TICQClient реализовать в DLL есть у кого вариа
AlexADMДата: Пятница, 18.11.2011, 04:21 | Сообщение # 1
Новичок
Зарегистрирован: 18.11.2011
Группа: Пользователи
Сообщений: 3
Статус: Offline
Доброго время суток форумчани. Ситуация такая, начну самого начала нужно в советник Метатрайдера (Клиент для рынка FOREX, язык для написание скриптов, торговых экспертов - MQL4 ) в эксперта вставить возможность отправку на аську информацию и получение её . MQL подержует импорт с dll. Нашел компонюху ICQClient. Вроде как сделал прием и отсылку без размещения на форме компонента (может и криво, ну как сумел) код ниже, осталось малое нужно класс запихать в DLL, вместо procedure TForm1.Button1Click(Sender: TObject) – экспортируемые функций. Создал модуль для dll вставил все ну за исключением формы (TForm1 = class(TForm) и т.д.), начал ругаться компилятор на var ICQClient:TMYICQ; Вопросов не сколько.
Это реально, сможет ICQClient работать из DLL, если да то как правильно подправить?
Класс TMYICQ = class(TICQClient) делал сам посмотрите, пожалуйста может как то можно лучше его составить где то подправить, к примеру глобальная переменная S для вывода сообщения, мне не нравится ну пока не придумал как её лучше заменить (опыта мало, даже простые задачи не сразу вижу). В принципе в такую ДЛЛку можно вложить нужный функционал и грузить с тем же винлогоном и асю использовать как терминал.

Заранее всем спасибо!!!
Если кто заинтересуется сделать подобное, потестить или просто так ссылка на компонент ICQClient http://sourceforge.net/projects/ticqlib/ сайт автора компонента http://www.cobans.net. К компоненту идёт в придачу русский и английский хелп.

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ICQClient,ICQWorks, StdCtrls, ExtCtrls;
type TMYICQ = class(TICQClient)
private
{ Private declarations }
public
F:Boolean;
s:String;
procedure Login(Sender: TObject);overload;
procedure ActiveICQ(PConvertToPlaintext:Boolean;PICQServer,PPassword,PUIN:String;PICQPort: Word) ;
function outICQ (Msg,UIN: String):string;
procedure MessageRecv(Sender: TObject; Msg,UIN: String);
procedure ConnectionFailed(Sender: TObject);
procedure Error(Sender: TObject; ErrorType: TErrorType;ErrorMsg: String);
{ Public declarations }
end;
var
ICQClient:TMYICQ;
Type // Если вставлять в ДЛЛ убрать
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure Conect(Login,Pass:String);
begin
ICQClient:=TMYICQ.Create(ICQClient);
ICQClient.OnMessageRecv:=ICQClient.MessageRecv;
ICQClient.OnLogin:=ICQClient.Login;
ICQClient.OnError:=ICQClient.Error;
ICQClient.ActiveICQ(true,'login.icq.com',Pass,Login,5190);
end;
procedure MesedgOUT (UIN,Msg:String);
begin
if ICQClient.F then
ICQClient.outICQ(Msg,UIN) ;
end;
{function MesedgIn ():String;//Нормально не работает
begin
Result:='';
if ICQClient <> nil then
begin
if ICQClient.s <> then
Result:=ICQClient.s;
end;
end;}
function TMYICQ.outICQ (Msg,UIN: String):string;
begin
if (not ICQClient.LoggedIn) then // если не залогинились
begin
MessageBox(0, 'Please, login before sending a message', 'Ошибка конекта', MB_ICONERROR);
Exit;
end;
ICQClient.SendMessage(StrToInt(UIN), Msg);// послать сообщение
end;
procedure TMYICQ.ActiveICQ(PConvertToPlaintext:Boolean;PICQServer,PPassword,PUIN:String;PI CQPort:Word) ;
begin
ICQClient.ConvertToPlaintext:=PConvertToPlaintext;
ICQClient.ICQServer:=PICQServer;
ICQClient.ICQPort:=PICQPort;
ICQClient.Password:=PPassword;
ICQClient.UIN:=StrToInt(PUIN);
ICQClient.Login;
end;
procedure TMYICQ.Login(Sender: TObject);
begin
f:=True;
end;
procedure TMYICQ.MessageRecv(Sender: TObject; Msg,UIN: String);//события возникает когда приходит сообщение
begin
s:='';
s:=UIN+': '+Msg;
end;
procedure TMYICQ.ConnectionFailed(Sender: TObject);
begin
s:='';
s:='Не могу подключиться к ICQ серверу либо сервер вас отключил по другим причинам';
end;
procedure TMYICQ.Error(Sender: TObject; ErrorType: TErrorType;ErrorMsg: String);
begin
s:='';
if ErrorType = ERR_WARNING then
s:='Warning: ' + ErrorMsg
else
s:='Error: ' + ErrorMsg;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Conect('Логин', 'Пароль');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
MesedgOUT('Номер АСЬКИ',Сообщение)
end;
end.
 
dolphinДата: Суббота, 19.11.2011, 12:50 | Сообщение # 2
Администратор
Сообщений: 906
Статус: Offline
Реализовать то можно, но вопрос в том подхватит ли ваша программа Делфовскую dll, сама программа на каком языке написана? Если не на делфи скорее всего могут быть проблемы с совместимостью.

Система: Windows 10 x64, Kali Linux
Среды программирования: Delphi 7, Delphi 10.x

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
AlexADMДата: Воскресенье, 20.11.2011, 23:00 | Сообщение # 3
Новичок
Зарегистрирован: 18.11.2011
Группа: Пользователи
Сообщений: 3
Статус: Offline
Скорее всего на с++
 
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz