Autor Beitrag
DiamondDog
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Mi 27.08.08 20:28 
Hallo Leute,
wenn ich in meinem Fenster die Checkbox HckAddContact anklicke bekomme ich immer folgende Fehlermeldung:
ausblenden Quelltext
1:
Zugrifsverletzung bei Adresse 0461BE23 in Modul 'UserOnline.dll'. Lesen von Adresse 00000000.					

Kann mir jemand sagen wieso und wie ich es beheben kann?

Ps: In der u_useron gehört das noch mit zu der funktion:
ausblenden Delphi-Quelltext
1:
procedure TQipPlugin.DrawSpecContact					


Danke schon mal fürs Helfen.

Mfg Dog
Einloggen, um Attachments anzusehen!
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 27.08.08 20:50 
Und wir sollen nun das komplette Projekt runterladen und uns durchlesen? Poste doch einfach die relevanten Code abschnitte hier..

Aber das
ausblenden Quelltext
1:
Lesen von Adresse 00000000.					

deutet normalerweise darauf hin, dass du auf etwas zugreifst, was es nicht gibt.. also, nicht erzeugte Klassen oder sowas.

_________________
PROGRAMMER: A device for converting coffee into software.
DiamondDog Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Mi 27.08.08 21:00 
Ok nur die Codeabschnitte:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TfmUserOnlineOptions.ckAddContactClick(Sender: TObject);
var PlugMsg1 : TPluginMessage;
begin
   if not ckAddContact.Checked then
   begin
      if (UniqContactId = 0then Exit;
      PlugMsg1.Msg    := PM_PLUGIN_SPEC_DEL_CNT;
      PlugMsg1.WParam := UniqContactId;
      PlugMsg1.DllHandle := FDllHandle;
      FPluginSvc.OnPluginMessage(PlugMsg1);
      UniqContactId := 0;
   end
   else
   if (UniqContactId=0then
   begin
      PlugMsg1.Msg    := PM_PLUGIN_SPEC_ADD_CNT;
      PlugMsg1.WParam := 19;
      PlugMsg1.LParam := 0;
      PlugMsg1.DllHandle := FDllHandle;
      FPluginSvc.OnPluginMessage(PlugMsg1);

      if (PlugMsg1.Result <> 0then UniqContactId := PlugMsg1.Result;
   end;
end;
und dann noch dieser:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
procedure TQipPlugin.DrawSpecContact(PlugMsg: TPluginMessage);
var ContactId : DWord;
    //Data      : Pointer;
    Cnv       : TCanvas;
    R         : PRect;
    wStr      : WideString;
    R1        : TRect;
    TestIcon  : HICON;
//   TestIcon  : TICON;
begin
  if not Assigned(fmUserOnlineOptions) then Exit;

  //get unique contact id from msg
  ContactId := PlugMsg.WParam;

  //actually all incoming ContactIDs will be only of your plugin, but here i made condition just for example
  if (ContactId <> fmUserOnlineOptions.UniqContactId) then Exit;

  //get your Data pointer which you added when sent PM_PLUGIN_SPEC_ADD_CNT.
  //IMPORTANT!!! Do NOT make here any heavy loading actions, like cycles FOR, WHILE etc.
  //That's why you have to add Data pointer to PM_PLUGIN_SPEC_ADD_CNT, to get quick access to your data.
  //Data not used here in this example because plugin added only one contact
  //Data      := Pointer(PlugMsg.LParam);

  //create temporary canvas to draw the contact
  Cnv       := TCanvas.Create;
  try

  //get canvas handle from msg
  Cnv.Handle := PlugMsg.NParam;

  //get drawing rectangle pointer from msg
  R := PRect(PlugMsg.Result);

  //this needed to draw text over contact list backgroud
  SetBkMode(Cnv.Handle, TRANSPARENT);

  //get test icon to draw
  TestIcon := LoadImage(FPluginInfo.DllHandle, 'XIcon', IMAGE_ICON, 1616, LR_DEFAULTCOLOR or LR_SHARED);
  //draw icon
  DrawIconEx(Cnv.Handle, 82, TestIcon, 161600, DI_NORMAL);
  //dont forget to destroy your icon
  DestroyIcon(TestIcon);

  //text of your contact
  wStr := 'SetXStatus Optionen';

  //Use Tahoma to draw your text, because its unicode font
  Cnv.Font.Name  := 'Tahoma';
  Cnv.Font.Color := clNavy;
  Cnv.Font.Size  := 8;
  Cnv.Font.Style := [fsBold];

  R1.Left:=R^.Left + 26 + FSpecLeft;
  R1.Top:= R^.Top + 1 + FSpecTop;
  R1.Right:= R^.Right;
  R1.Bottom:=R^.Bottom;

  //text drawing
  //IMPORTANT! If your text may have non ascii symbols, then use unicode drawing.
  DrawTextW(Cnv.Handle, PWideChar(wStr), Length(wStr), R1, DT_LEFT);

  finally
  //free canvas
  Cnv.Free;
  end;
end;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
{das hier}
  R1.Left:=R^.Left + 26 + FSpecLeft;
  R1.Top:= R^.Top + 1 + FSpecTop;
  R1.Right:= R^.Right;
  R1.Bottom:=R^.Bottom;

{sah vorher so aus}
R1 := Rect(R^.Left + 26 + FSpecLeft, R^.Top + 1 + FSpecTop, R^.Right, R^.Bottom);
Nur er wuste mit Rect nix anzufangen, deswegen die Änderung.
Hab das alles aus einem andern Plugin übernommen, wo das ganze ohne Probleme funktioniert.
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Do 28.08.08 12:45 
Hi
Wie wär's mal mit nem Haltepunkt und anschließenden Step mittels F7. Dann denk ich, findest du schon die Zeile, wo's kracht.
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....