ICQ - форум. Всё про ICQ.

ICQ - форум. Всё про ICQ. (https://forum.asechka.pro/index.php)
-   Программирование (https://forum.asechka.pro/forumdisplay.php?f=677)
-   -   TICQClient - исправления, дополнения и прочее (https://forum.asechka.pro/showthread.php?t=97186)

Sax-mmS 28.05.2007 06:59

TICQClient - исправления, дополнения и прочее
 
Вложений: 1
В этой теме будут выкладываться исправления и дополнения к компоненту TICQClient от Кобана для Delphi.


Компонент, актуально работающий на 13.08.2010
скачать: TICQClient
Пример работы с компонентом:
скачать: СheatICQ
Официальный хелп от coban2k
скачать: Вложение 13158



==============================

Оригинальный компонент (с демо): скачать


Компонент с работающими прокси и кодировками скачать тут


Компонент от Romen'a (с демо):
- движок на ICQ
- к архиве есть все необходимые модули (для WSocket'a от ICS 1.4, плюс из RxLib несколько модулей)
- из компонента убрано все "лишнее"
скачать

Демки делались в Turbo Delphi 2006, поэтому если вы будете собирать их под Delphi 7 и ниже не забудте в насткойках проекта указать пути, иначе среда не найдет эти модули и будет ругаться на их отсутствие.



1) Project -> Options
2) Закладка Directories/Conditionals
3) -> Units output directory: Units
-> Search path: ICQClient

Romen 01.06.2007 11:59

Если поменять везде где идет отсылка/прием сообщений(авторизаций) тип UIN:LongWord на String то можно будет и на AIM ники писать мессаджи :)

Romen 01.06.2007 12:58

Выложу поиск как в QIP - поиск собеседников и как в ICQ6 ....
в ICQWorks

Код:

{Do an extensive search for a user one. ADV}
procedure CreateCLI_SEARCHWP_(Pkt: PRawPkt; UIN: LongWord; MinAge, MaxAge: Word;
  Gender: Byte; Language: Word; City: String; Country: Word; Online: Byte; var Seq, Seq2: Word);
var
  lpkt: TRawPkt;
  lpkt2: TRawPkt;
begin
  if (Gender <> GEN_MALE) and (Gender <> GEN_FEMALE) then
    Gender := 0;                        //Don't care about gender
  PktInitRaw(@lpkt);                    //Initialize temporary packet
  PktInt(@lpkt, $a00F, 2);              //CLI_SEARCHBYPERSINF, Channel: 2, SNAC(21,2) 2000/4000
  PktInitRaw(@lpkt2);                    //Initialize temporary packet

  if City <> '' then begin PktInt(@lpkt2, $00a0, 2); PktNTS(@lpkt2, City); end;                                        //City/State
  if Country <> 0 then begin PktInt(@lpkt2, $00be, 2); PktInt(@lpkt2, $0004, 2); PktInt(@lpkt2, Country, 4); end;        //Country
  if Language <> 0 then begin PktInt(@lpkt2, $00FA, 2); PktInt(@lpkt2, $0002, 2); PktInt(@lpkt2, Language, 2); end;      //Language
  if Gender <> 0 then begin PktInt(@lpkt2, $0082, 2); PktInt(@lpkt2, $0001, 2); PktInt(@lpkt2, Gender, 1);  end;          //Gender
  if (MinAge <> 0) and (MaxAge <> 0) then begin PktInt(@lpkt2, $0154, 2); PktInt(@lpkt2, $0004, 2); PktInt(@lpkt2, MaxAge, 2); PktInt(@lpkt2, MinAge, 2); end;      //Age
  if Online = 1 then begin PktInt(@lpkt2, $0136, 2); PktInt(@lpkt2, $0002, 2); PktInt(@lpkt2, $0001, 2); end;                //Search only online users

  PktLInt(@lpkt, lpkt2.Len + 26, 2);

  PktInt(@lpkt, $05b90fa0, 4);
  PktInt(@lpkt, $00000000, 4);
  PktInt(@lpkt, $00000000, 4);
  PktInt(@lpkt, $04e30000, 4);
  PktInt(@lpkt, $00020002, 4);
  PktInt(@lpkt, Seq2, 2);
  PktInt(@lpkt, $0001, 2);
  PktInt(@lpkt, lpkt2.Len, 2);

  PktAddArrBuf(@lpkt, @lpkt2, lpkt2.Len);

  CreateCLI_TOICQSRV_(Pkt, UIN, $07D0, @lpkt, lpkt.Len, Seq, Seq2);
end;


procedure CreateCLI_TOICQSRV_(Pkt: PRawPkt; UIN: LongWord; Command: Word; Data: Pointer; DataLen: LongWord; var Seq, Seq2: Word);
var
  lpkt: TRawPkt;
  len: Word;
begin
  PktInit(Pkt, 2, Seq);                        //Channel 2
  PktSnac(Pkt, $15, $02, $00000000, 0);      //Snac: Type x15/x02, ID x00000000, Flags 0
  PktInitRaw(@lpkt);
  Inc(lpkt.Len, 2);
  PktInt(@lpkt, Swap32(UIN), 4);
  PktInt(@lpkt, Swap16(Command), 2);
  PktInt(@lpkt, Swap16(0), 2);
  PktAddArrBuf(@lpkt, Data, DataLen);
  //Store remaining size
  len := lpkt.Len;
  lpkt.Len := 0;
  PktLInt(@lpkt, len - 2, 2);
  lpkt.Len := len;
  //--
  PktTLV(Pkt, 1, lpkt.Len, @lpkt);
  PktFinal(Pkt);
  Inc(Seq2);
end;

в ICQClient

Код:

procedure TICQClient.HSnac1503(Flap: TFlapHdr; Snac: TSnacHdr; Pkt: PRawPkt);
.....
          $a401, $ae01: //SRV_METAFOUND Channel: 2, SNAC(21,3) 2010/420 or Channel: 2, SNAC(21,3) 2010/430
          begin
              ........
          end;

          $b40f, $aa0f: //SRV_METAFOUND Channel: 2, SNAC(21,3) 2010/420 or Channel: 2, SNAC(21,3) 2010/430
          begin
            if GetInt(Pkt, 1) <> $0a then
            begin
              if Assigned(OnUserNotFound) then
                FOnUserNotFound(Self);
              Exit;
            end;
            Inc(Pkt^.Len, 2);                  //Length of the following data.
            UIN := GetStr(Pkt, 23);  //skip all not needed  -- не расшифровывал
            foundedcnt := GetInt(Pkt, 2);  // количество результатов в поиске
            UIN := GetStr(Pkt, 8);  //skip all not needed -- не расшифровывал
            UIN := trim(GetWStr(Pkt));  //The user's UIN.
            if UIN = '' then
            begin
              if Assigned(OnUserNotFound) then
                FOnUserNotFound(Self);
              Exit;
            end;
            if Assigned(OnUserFound) then
              FOnUserFound(Self, UIN, '', '', '', '', foundedcnt, 0, 0, cmd = $b40f, false);
          end;

вот такая тема. НО КАК ВИДИТЕ в ответе только UIN. в принципе он меня и интересовал при поиске.

Sax-mmS 08.06.2007 10:08

В компоненте есть регистрация номеров, тока она стала с картинками и баном по ip - 3 номера в 15 минут. Плюс ее надо переписывать, что вобщем не сложно. Но тут один плюс (он же минус) - номера регаются инвизы. СКРИН. Минус в том, что если ими не воспользоваться в течение какого-то срока их удалят, ну и пароль ресетнут.

yxu 08.06.2007 13:42

Вложений: 1
А вот версия компанента от yegor вроде. Давно нарыл на каком то сайте, соответственно придется вносить изменения на логин и приемку сообщений, НО зато тут исправлена работа с прокси и понапихано немножко полезных функций, типа регистрации нового уина с картинками :) За базовый компонент конешно брать не рекомендую, но повырезать много полезных вкусностей можно ;)

Sis 14.06.2007 14:02

Подскажите как выгрузить контакт лист с сервера???


____________________

:helpsmili :helpsmili :helpsmili

Попрошайка 14.06.2007 18:59

Народ, а кто нибудь сталкивался с проблемой подключения к серверу ICQ при использовании
компонент от Кабана, а именно в проекте без форм?

TICQClient v.1.21 (пропатченная), Delphi 7

Тоесть даже если :

project SuperICQ;

uses windows, ICQClient,...;

var
ICQ : TICQClient;

begin
try
ICQ := TICQClient.Create(nil);
ICQ.UIN := 123123;
ICQ.PassWord := 'superpass';
ICQ.Login;
finally
....
ICQ.Free;
end;
end.

Причём именно в таком раскладе, если тоже самое перенести в проект где присутствуют формы, то всё нормально.

P.S. В некоторых модулях TICQClient были строчки
с директивами в которых автор давал рекомендацию
для их удаления, если компонент используется в проекте без форм, но толку это не дало. Пробовал вообще избавиться от класса TComponent из TICQClient, что бы привести всё к виду : ICQ := TICQClient.Create; вместо Create(nil). Но ничего не дало... в Королевстве Дельфи находил похожую проблему, но рецепта на излечения не нашёл :(

И на одном из сайтов нашёл похожую проблему, где парень писал плагин к Download Master, там давали совет включить строчку в проект Applicatio.CreateHandle; но в моём проекте вообще нет модуля Forms, .... вообщем уже 2 недели копаюсь... помогите пожалуйста!!!! SOS!!! :helpsmili

Sax-mmS 15.06.2007 08:19

А он и не будет работать без Forms. Класс Application - это по сути менеджер для работы с сообщениями винды. TICQClient работает с потоками, но его таймеры работают на сообщениях, поэтому если в приложении нет собтсвенного диспетчера собщений он работать не будет. Пиши свой аналог TApplication :)

Можно попробовать отключить директиву USE_FORMS, но это не избавить тебя от модуля Forms (он используется в ICQClient.pas, а потому принудительно линкуется к программе)

yxu 16.06.2007 11:56

А вот у меня возник еще такой вопрос в icqworks.pas есть флаги для показа ip и webaware. Вот хотел бы узнать куда их нужно прилепливать, чтоб соответственно показывать айпи и вебаваре, пытался прикрутить к статусу, но чото все равно не показывает не то, не другое.

Sax-mmS 16.06.2007 14:18

по идее в SNAC(01,1E) CLI_SETxSTATUS, а еще в SNAC(15, 02) можно, какая-то новая разновидность пакетов появилась. Сам не видел, но говорят есть.

filippusik 17.06.2007 10:18

Цитата:

Сообщение от Isis
Ведь с 1 ip можно подключать не более 6 номеров, а тут прям =)

Это ты по своей локалке судишь или по GPRS )))

Даже при использовании ТраффикКомпрессора - выводится 19 номеров одновременно.
Без него - до 130 и более

// и никаких проксов ;)

ALnEtNoInA 22.06.2007 11:12

Вместо
Цитата:

AIMClient.ScreenName:=SNEdit.T ext;
Надо
Цитата:

AIMClient.UIN:=StrToInt(SNEdit .Text);

B.bl.M./7.E./l 23.06.2007 10:33

не велика разница... теперь просто пишет "соединение" и всё... :-\
кто-нибудь! скинте пожалуйста самую примитивную,
исключительно чтобы работала , абсолютно без наворотов,
уже готовую прогу, которая работает на 100%, с исходником.
буду оч благодарен

Sax-mmS 23.06.2007 12:15

Demo. Правда там компонент родной.

yxu 24.06.2007 13:21

Раз компанент выдран из NIC значит надо зайти в соответствующую тему и скачать выложенные AUR исходники NIC, логично не правда ли?
А так попробуй:
AIMClient:= TICQClient.Create(MainForm);
AIMClient.ICQServer:= 'login.icq.com';
AIMClient.ICQPort:= 5190;
AIMClient.ScreenName:= ...;
AIMClinet.UIN:=...;
AIMClient.Password:= ...;
AIMClient.Login;

Sax-mmS 27.06.2007 15:35

Help по компоненту. А вообще поищи FacileICQ - простенький ICQ клиент на этом компоненте с сорцами.

schnaps 01.07.2007 15:54

еще вопрос к знающим =) почему то не хочет клиент прицеплятся через прокси :( последняя возвращает ошибку с кодом 403 (forbidden) настройками компонента побаловался чего то не помогло... может быть в самом компоненте как то неправильно реализованы запросы на эту самую прокси? кто чего подскажет может? заранее спасибо

Sax-mmS 01.07.2007 19:05

Во-первых, не факт что проксик поддерживает CONNECT без авторизации, во-вторых, прокси в компоненте действительно очень криво сделаны (1 из 100 когда проксик пашет), в-третьих - правленного варианта не видел.

schnaps 02.07.2007 18:15

прокси поддерживает соединение без авторизации, я ей сам постоянно пользуюсь, ибо прокси эта предоставлена моим провайдером и сделана специально для аськи, а вот насчет кривости компонента я сразу подумал...потому как заводские пагеры куипы всякие да аськи ходят как из ружья =) а по поводу 3го хорошо бы еслиб кто поправил :blushing: а то я сам не особо силен в программировании приложений для сетей :dunno: или совет бы ценный =) и все равно спасибо за инфу

yxu 02.07.2007 18:33

Вот появилось свободное время продолжаю встраивать всякие вкусности в компанент, вот делал определение клиента пользователя. С помощью исходников крыски и снифера сделал определение наверно всех нестандартных клиентов и вот возник вопрос как корректно и граммотно лучше всего определять версию стандартных icq клиентов 98, 99, 2000, 2001, lite, 2003b и т.д. В крысе сделано по версии протокола, а как же тогда 4, 5.1 и 6? Или лучше сравнивать наборы capabilities, вообщем хотел бы услышать полный ответ, если можно с примером или поподробнее. Заранее спасибо.

SirJohn 09.07.2007 18:43

Dimon550, ясно.. Ты про входящие мессаги. Ну я на них особо не обращал внимания, т.к. пишу спамер, но вроди чето доходит =)

Добавлено через 1 минуту
А вооще событие может не работать потому што написал непраилно ченибудь
ICQ.OnMessageRecv:= OnICQMessageRecv;

procedure TForm1.OnICQMessageRecv(Sender : TObject; Msg, UIN: String);
begin
mmLog.Lines.Append(UIN+'>>:'+m sg);
end;
- гденидь опечатался и на входящие месаги глухо как в танке

Dimon550 09.07.2007 21:18

я ща просидел, с последнего моего поста, пытаясь понять почему пакеты не допускаются к обработке. оказывается, от некоторых уинов приходят большие пакеты, которые не вписываются не в одну из категорий, которая описана в компоненте...

procedure TICQClient.HSnac0407(Flap: TFlapHdr; Snac: TSnacHdr; Pkt: PRawPkt);
вот эта процедура отвечает за допуск к обработке.
обычно выступают такие значения:
строка с операцией | результат выполнения
2117 | 1
2128 | 2

а вот при этих не допускается:
2117 | 2
(первый и второй цикл)
2160 | неравно 5
(третий цикл)
2160 | равно 5
2163 | 0
что приводит к выходу из функции

P.s. - а в демке такая же лажа)))

Добавлено через 2 часа 37 минут
Так теперь другая проблема: во время дисконнета выдает Error вида:
'Thread Error: Неверный дескриптор (6)':dunno:
смотрел код - все вроде норм... Но тогда на что оно ругается:dunno: :confused_

Добавлено через 3 часа 20 минут
:dry: спасибо за вашу помощь, пришлось все самому делать.... всё работает, а с теми, кто мне помог, я поделюсь

Sax-mmS 10.07.2007 13:58

Цитата:

'Thread Error: Неверный дескриптор (6)'
Лечится выставлением DisableDirectConnections:= True

yxu 12.07.2007 22:20

Цитата:

'Thread Error: Неверный дескриптор (6)'
Открываем IcqWorks.pas ползем в самый низ и меняем как у меня:

destructor TThreadTimer.Destroy;
begin
fTrigger.Terminate;
if not fTrigger.Suspended then
fTrigger.WaitFor;
//else fTrigger.Free;
inherited;
end;

P.S. Sax-mmS, не мог бы ты подсказать по моему вопросу про определение версий стандартных icq клиентов, думаю ты должен знать. Спасибо за внимание ;)

Romen 17.07.2007 12:47

Вложений: 1
короче кому нужен клиент на TWSocket со встоенной поддержкой SOCKS проксей и дописанной HTTPs PS: частично реализована смена инфы на номере. а так все работает. повыкидывал всякие методы по передаче файлов и по DC... не забываем тыкать спасибо...

Вложение 6258

yxu 27.07.2007 22:57

Я тут ковырял capabilities, вот насобирал кучку. Можно юзать для определения версии клиента или смены своей версии :)
Смотрим тут

yxu 29.07.2007 00:09

Дак собственно в чем сложность то, берешь и суешь в капабилды свою строчку :) Просто она отоброжаться нигде не будет почти. Ну там в r&q сейчас показывает капабилды так то. Вообщем вот строчка:
#$41#$73#$65#$63#$68#$6B#$61#$ 20#$20#$20#$20#$20#$20#$20#$20 #$20 // Asechka и кучка пробелов ;)
Берешь ascii номер от буквы и переводишь из десятичной в 16-ую и все.

Isis 29.07.2007 01:50

Хм...странно, но как квип тогда показывает не свои клиенты...
Допустим вышел новый клиент Icq 7.0 , а в квипе хоть даже в 8000 покажет ведь нормально...
Почему мы свой не можем вставить =\
Странно блин

yxu 29.07.2007 11:16

Да ну, брось давай, квип, как и любой другой интернет пейджер определяет только то, что в него заложено. Просто создатели же тоже не клювом щелкают, они по возможности заранее закладывают определение версий.

OkeyUA 06.08.2007 10:25

Моя модификация TICQClient
 
Случайно наткнулся на данный форум. Решил поделиться тем что я сделал.
Основные отличия от оригинальной версии:
- md5 авторизация
- отсылка/прием typing notification
- download/upload аватаров
- Исправлены все изменения протокола на сегодняшний день
- ну и куча всего по-мелочи

Взять можно с www .kozachok .net .ua/downloads/TIcqClient/

Буду рад если кому-нибудь пригодится.
При использовании кода с моими изменениями ссылка на автора в шапке модуля обязательна.

BeteTest 06.08.2007 19:31

OkeyUA,
А как начёт передачи файлов?

yxu 06.08.2007 19:36

Вложений: 1
OkeyUA, спасибо, возьму пару полезностей. Написано с умом, с расстановкой, очень понравилось спасибо. Советую использовать всем.
Файлика только не хватает uses uMD5Hash ;) Вот порылся у себя нашел файлик, вроде подходит.

OkeyUA 07.08.2007 00:20

Цитата:

Сообщение от BeteTest (Сообщение 290897)
OkeyUA,
А как начёт передачи файлов?

Эта часть осталась в изначальном виде.
Как-то небыло необходимости.

BeteTest 09.08.2007 18:18

OkeyUA,
1 Решил проверить код на стабильность и вот:
Модуль ICQClient.pas, фрагмент проблемного кода:
Код:

if (Length(Msg) > 0) then
              begin
                if (MsgType = M_PLAIN) or (MsgType=147) then
                begin
                  if FDoPlain then Msg := Rtf2Plain(Msg);  //Convert message from RTF to plaintext when needed
                  if Assigned(OnMessageRecv) then
                  FOnMsg(Self, UTF8ToStr(Msg), UIN);
                end else
                if MsgType = M_URL then
                begin
                  Desc := Copy(Msg, 0, Pos(#$fe, Msg) - 1);
                  URL := Copy(Msg, Pos(#$fe, Msg) + 1, Length(Msg) - Pos(#$fe, Msg));
                  if Assigned(OnURLRecv) then
                    FOnURL(Self, Desc, URL, UIN);

Фрагмент справки из BDS2006:
Код:

ShortString
 255 characters
 2 to 256 bytes
 backward compatibility
 
AnsiString
 ~2^31 characters
 4 bytes to 2GB
 8-bit (ANSI) characters, DBCS ANSI, MBCS ANSI, etc.
 
WideString
 ~2^30 characters
 4 bytes to 2GB
 Unicode characters; multi-user servers and multi-language applications

При отправки текста, максимального размера из QIP зависает приложение на компоненте в подсвеченой срочке!
Может надо заменить тип со String на другой или указать дериктиву компилятору?
Или брезать лишний текст?

2 И нужно унифицировать, UIN - Word, Integer или String, будет?

3 А справки коротенькой по аватарам нету? Т.к. в коде док. нету.

По протоколу из темы:
1 Планируется исправление отправки Статус сообщения и добавления установки текста ХСтатуса и сообщения ХСтатуса.

yxu 09.08.2007 21:44

Вложений: 1
Цитата:

Сообщение от BeteTest
А справки коротенькой по аватарам нету? Т.к. в коде док. нету

Вот накидал примерчик себе, чтоб посматреть как аватары работают, делюсь по доброте своей душевной ;)
P.S. А да, забыл добавить, там у меня сделано только jpeg аватарки грузить, для остальных расширений надо юзать соответствующие компаненты.

OkeyUA 10.08.2007 10:44

Цитата:

Сообщение от BeteTest (Сообщение 291923)
OkeyUA,
1 Решил проверить код на стабильность и вот:
...
FOnMsg(Self, UTF8ToStr(Msg), UIN);
...

Попробуй заменить UTF8ToStr на UTF8Decode.

Цитата:

2 И нужно унифицировать, UIN - Word, Integer или String, будет?
Несомненно нужно унифицировать. И не только UIN.
Нужно "правильно" переписать блок приема и отправки сообщений. Таким образом, чтобы он был минимально чувствителен к изменениям протокола... Также нужно еще много чего... Вопрос в малом - мотивация и время :)

Цитата:

А справки коротенькой по аватарам нету? Т.к. в коде док. нету.
Ну если коротенькую :) :

Прием пользовательских аватаров:
Код:

...
IcqClient.Avatars := True;
...

В обработчике события OnOnlineInfo пишем код:

 if AvatarHash <> '' then
  begin
    if Contact.Avatar.Hash <> AvatarHash
    begin
      IcqClient.RequestAvatar(UIN, AvatarId, AvatarFlags, AvatarHash);
      Contact.Avatar.Hash := AvatarHash;
      Contact.Avatar.Id := AvatarId;
      Contact.Avatar.Flags := AvatarFlags;
      Contact.Save;
    end;
  end;

Нужно запоминать hash полученного аватара и следующий запрос на получение слать в случае изменения хеша

В обработчике события OnAvatarReceive пишем что-то типа

    AssignFile(f, AvatarDir(ImOwner.UIN)+UIN+AvatarExt);
    Rewrite(f);
    Write(F,AvatarData);
    CloseFile(F);
    SendBroadCastMessage(WM_AVATAR_CHANGED,0,Longint(Self));

Все, аватар пользователя у нас на локальном диске.

Аплоад своего аватара
Код:

  IcqClient.UploadAvatar(OpenPictureDialog.FileName);
В деле download/upload аватаров необходмо помнить о том, что в случае если IcqClient.Avatars = true, компонент создает новое подключение к серверу AOL. Причем было замечено что это подключение отрубается от сервера довольно часто. В своей версии TICQClient я реализовал переподключение в случае отвала. Вроде работает стабильно.

Synergy 12.08.2007 16:15

Проблема
 
Я пишу ICQ бота с поддержкой плагинов.
Так вот все хорошо но почему то после того как бот получает сообщение он пишет типа соединение разорвано. В чем может быть проблема?
Вот код:

Код:



function ComParser(msg:string):string;
var
i:integer;
Answer:TAnswer;
hdll:THandle;

help,dlln,outx:string;
begin
help:='Справка.';

for i:=0 to form1.coms.Items.Count-1 do begin

  help:=help+#13+form1.coms.Items.Item[i].Caption+' : '+form1.coms.Items.Item[i].subitems.Strings[2];
  //
  if pos(form1.coms.Items.Item[i].Caption,Msg)=1 then begin
  //
  Msg:=copy(msg,length(form1.coms.Items.Item[i].Caption)+2,Length(msg)-length(form1.coms.Items.Item[i].Caption)+1);
  form1.log.Lines.add(Msg);

  if i>0 then begin

      dlln:=extractfilepath(application.ExeName)+'Plugins\'+form1.coms.Items.Item[i].subitems.Strings[0];
      //
      if FileExists(dlln) then begin
        hdll:= LoadLibrary(PChar(dlln));
        if hdll<=0 then form1.Log.Lines.Add('ERROR: Ошибка вызова');
        try
          @Answer:=GetProcAddress(hdll,'answer');
          if not assigned(Answer) then form1.log.Lines.Add('ERROR: Ошибка процесса');
          outx:=Answer(msg);
          finally
          FreeLibrary(hdll);
      end;
      //
  end;
  //

  end;
  //

  //
  if pos('!help',Msg)=1 then outx:=help;
  //

end;
end;
  Result:=outx;
end;



procedure TForm1.ICQMessageRecv(Sender: TObject; Msg, UIN: String);
var
s:string;
begin
log.Lines.add(UIN+': '+msg);
s:=ComParser(msg);
 if Length(s)>1900 then begin
 SetLength(s,1900);
 s:=trim(s);
 end;
ICQ.SendMessage(strtoint(uin),s);
end;


проверял, dll возвращает значение.
уже несколько раз пробовал, как только делаю динмаическим ответ (несколько команд) так всегда вот такая ошибка.

Заранее спасибо!!!

Sax-mmS 12.08.2007 16:34

Во-первых, интересно посмотреть код хоть одной функции Answer из библиотеки, потому что Delphi, мягко говоря, не дает передавать в DLL значения типа String. Они туде не доходят.

Во-вторых, ICQMessageRecv смотрел под отладчиком?

Synergy 12.08.2007 16:45

Ну я проверял на функции в DLL


function answer(msg:string):string;expo rt;

begin
Result:=Engtorus(msg);
end;

в принципе сколько писал со string проблем не было.
Я проверял -функция нормально возвращает значение.

Отладчик пока не смотрел...

Добавлено через 2 часа 31 минуту
Цитата:

Anardael
Компонент под миранду
Я не знаю или будет по теме, но я немного занимался созданием компонента, который бы использовал мирандовскую длл для аськи... Немного в этом вопросе продвинулся, ну тоесть создал простенький компонентик который умеет принимать отправлять сообщения, если кого заинтересует - пишите :)

Если можно выложи)

Anardael 12.08.2007 22:16

1) Передавать стринги в делфе с длл-ки это хороший источник ошибок, потому что оно то работает - то нет.
2) то что сейчас есть - вылаживать - стыдно (немного коряво написано, да и ещё глюк есть), а кого заинтересует в нем разбираться - могу кинуть на мыло.
3) В новом TICQClient у меня наблюдается глюк: на некоторых сообщениях приходит не то что отправил, то есть после сообщения приходит ещё какой-то мусор, а иногда вообще виснет... Ни у кого такого не наблюдалось?


Часовой пояс GMT +3, время: 16:02.

Перевод: zCarot
Форум Асечников © Asechka.RU