komponent gglite w dll

John_zuk

Użytkownik
Dołączył
Lipiec 24, 2009
Posty
3
Napisałem biblioteke dll (kod poniżej) i wszystko działa mogę połączyć się z serwerem gg i wysłać wiadomość, tylko teraz chciał był dowiedzieć się jak odebrać wiadomość którą ktoś przyśle do mnie i przestać jej tekst do aplikacji korzystającej z tej biblioteki? Tzn jak przechwycić nadesłaną wiadomość i przesłać ja do aplikacji korzystającej z tego dll-a. Prosiłbym o jakiś fragment kodu bo ja nie mam pojęcia jak coś takiego zrobić.

Kod:
library gg;


uses
  Windows,
  SysUtils,
  Variants,
  Classes,
  Dialogs,
  GGlite;

var
ggl:tGGlite;
MsgFormat : array of variant;

procedure connect(numb:integer;
                  pass:pchar); stdcall;
begin
  ggl.login := numb;
  ggl.password := pass;
  ggl.GGInitHost;
  ggl.GGLogon;
  ggl.UserStatus := usAvailable;
  ggl.GGChangeUserStatus;
end;


procedure sendmsg(nr:integer;mess:pchar); stdcall;
begin
  MsgFormat := VarArrayCreate([0,1], varVariant);
  MsgFormat[0] := 0;
  MsgFormat[1] := '';
  ggl.GGSendMessage(true,nr, mess,MsgFormat);
end;


exports
  connect name 'connect',
  sendmsg name 'sendmsg';

var
  P : Pointer;

procedure DLL_Proc(Reason : Integer);
begin
if Reason=DLL_PROCESS_DETACH then FreeMem(P);
end;

begin
  ggl:=tgglite.Create(nil);
  DLLProc := @DLL_Proc;
  P := AllocMem(1024);
end.
 

thc_flow

Zbanowany
Dołączył
Listopad 13, 2008
Posty
649
Dodaj najpierw do dll'a funkcję odbierania wiadomości i ją wyeksportuj. Następnie możesz ją użyć w programie tak jakby była w niego wbudowana, gdzie tu problem?
 

adikx

Użytkownik
Dołączył
Maj 21, 2007
Posty
415
Musiałbyś w timerze sprawdzać co chwilkę czy są wiadomości. Kiepskie rozwiązanie. Pisałem już o tym tutorial i jest nawet przyklejony. Szukaj xD(w dziale delphi)
 

I3L4D3

Użytkownik
Dołączył
Styczeń 20, 2008
Posty
178
<div class='quotetop'>CYTAT(adikx @ 25.07.2009, 7:58) <{POST_SNAPBACK}></div>
Musiałbyś w timerze sprawdzać co chwilkę czy są wiadomości. Kiepskie rozwiązanie. Pisałem już o tym tutorial i jest nawet przyklejony. Szukaj xD(w dziale delphi)[/b]
Błąd... Po co dodawać 400 KB do dll?
DLL powinno mieć jak najmniejszy rozmiar...

Ja bym to dał w wątek. Albo za pomocą SetTimer() - chociaż sam nie wiem jak to działa, ale słyszałem parę słów na ten temat...
<
 

adikx

Użytkownik
Dołączył
Maj 21, 2007
Posty
415
Źle zrozumiałeś. Normalnie exek ma dostęp do procedur i funkcji w dll, a ja napisałem tutorial o odwrotnej sytuacji kiedy to dll wykonuje procedure w aplikacji. Można to wykożystać na kszatłt zdarzeń? Bez żadnych wąteczków xD
 

I3L4D3

Użytkownik
Dołączył
Styczeń 20, 2008
Posty
178
<div class='quotetop'>CYTAT(adikx @ 25.07.2009, 13:39) <{POST_SNAPBACK}></div>
Źle zrozumiałeś. Normalnie exek ma dostęp do procedur i funkcji w dll, a ja napisałem tutorial o odwrotnej sytuacji kiedy to dll wykonuje procedure w aplikacji. Można to wykożystać na kszatłt zdarzeń? Bez żadnych wąteczków xD[/b]


Nie zrozumiałeś mnie za dobrze... W dll trzeba dać wątek który sprawdza jaki pakiet się otrzymało itd... ;]
 
Do góry Bottom