Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit der Manifest-Geschichte (https://www.delphipraxis.net/66149-problem-mit-der-manifest-geschichte.html)

delphinia 25. Mär 2006 17:32


Problem mit der Manifest-Geschichte
 
Liste der Anhänge anzeigen (Anzahl: 2)
Moin

habe in meinem Programm eine ListView - eingestellt auf Report nun kommt es mit der Manifest-Geschichte zu Problemen
sobald ich mit der Maus die Column berühre


Dann erhalte ich dieses CPU Fenster siehe Bild 1 und das Programm wird gestoppt!

Bild 2 zeigt worauf ich genau kommen muss mit der Maus damit es zum Fehler kommt!


ps.: wenn ich das Programm ausserhalb von Delphi laufen lasse gibt es keine probleme doer Fehlermeldungen!
Dennoch nervt es zu entwicklungszeit!

Die Muhkuh 25. Mär 2006 17:34

Re: Problem mit der Manifest-Geschichte
 
Hi,

http://www.delphipraxis.net/internal...ht=patch+ntdll

delphinia 25. Mär 2006 17:36

Re: Problem mit der Manifest-Geschichte
 
danke dür die schnelle Hilfe!
Nur verstehe ich das nicht und weis auch nicht wie ich das einbinden muss?!
Muss das in die OnCreate oder?

Die Muhkuh 25. Mär 2006 17:42

Re: Problem mit der Manifest-Geschichte
 
Du fügst die Procedure "PatchInt3" einfach in deine Unit der Mainform ein.

Und dann schreibst du ganz unten, vor dem end. noch das hin:

Delphi-Quellcode:
initialization

// nur wenn ein Debugger vorhanden, den Patch ausführen
if DebugHook<>0 then
   PatchINT3;
Sieht nachher also so aus:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Hier steht noch dein anderer Code :)

procedure PatchINT3;
var
  NOP : Byte;
  NTDLL: THandle;
  BytesWritten: DWORD;
  Address: Pointer;
begin
  if Win32Platform <> VER_PLATFORM_WIN32_NT then Exit;
  NTDLL := GetModuleHandle('NTDLL.DLL');
  if NTDLL = 0 then Exit;
  Address := GetProcAddress(NTDLL, 'DbgBreakPoint');
  if Address = nil then Exit;
  try
    if Char(Address^) <> #$CC then Exit;

    NOP := $90;
    if WriteProcessMemory(GetCurrentProcess, Address, @NOP, 1, BytesWritten) and
      (BytesWritten = 1) then
      FlushInstructionCache(GetCurrentProcess, Address, 1);
  except
    //Do not panic if you see an EAccessViolation here, it is perfectly harmless!
    on EAccessViolation do ;
    else raise;
  end;
end;

initialization

// nur wenn ein Debugger vorhanden, den Patch ausführen
if DebugHook<>0 then
   PatchINT3;

end.

delphinia 25. Mär 2006 17:51

Re: Problem mit der Manifest-Geschichte
 
:thumb: :thumb: :thumb: Danke - super hilfe - super Erklärung..... einfach top danke und ein schönes ruhiges Wochenende

Die Muhkuh 25. Mär 2006 17:55

Re: Problem mit der Manifest-Geschichte
 
Bitte ;)

MrKnogge 25. Mär 2006 18:21

Re: Problem mit der Manifest-Geschichte
 
@delphinia
Vergiss bitte nicht deine offene Frage noch als beantwortet z markieren.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz