AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Zugriff auf ein TImage einer externen Anwendung
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf ein TImage einer externen Anwendung

Ein Thema von KoS · begonnen am 15. Feb 2007 · letzter Beitrag vom 21. Mär 2007
Antwort Antwort
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#1

Re: Zugriff auf ein TImage einer externen Anwendung

  Alt 27. Feb 2007, 14:45
So, jetzt kommt noch etwas Komfort in die Sache (hoffe ich). Ich hab die Exceptionbehnadlung hinbekommen. Dadurch schmiert der fremde Prozess nicht ab, wenn ein Fehler in der Info auftritt (bei mir klappt es zumindest ).

Die Änderungen mal wieder im Text:
Delphi-Quellcode:
procedure info(...); stdcall;
//bisherige Variablen beibehalten
//neu hinzukommen:
var isexception:longbool;
    myexception:cardinal;
begin
  asm //ging leider nur in Assembler
    xor edx,edx
    mov myexception,edx
    mov isexception,edx
    push ebp
    call @@1
   @@1:
    add [esp],15
    push dword ptr fs:[edx]
    mov dword ptr fs:[edx],esp
    mov myexception,esp
    jmp @@try
   @@except:
    mov eax,esp //hier springt er hin, wenn eine Exception auftaucht
    add eax,4
    mov esp,myexception
    mov ebp,[esp+8]
    inc isexception
    xor edx,edx
    pop dword ptr fs:[edx]
    pop edx
    pop ebp
    mov eax,[eax]
    mov edx,dword ptr [eax]
    mov wparam,edx //ExcpetionCode
    mov edx,[eax+12]
    mov lparam,edx //Adresse, wo passiert
   @@try:
 end;

 if not isexception then begin
   //hier kommt alles was sonst zwischen try..except stehen würde
   //also der bisherige Inhalt der Info
   Searchtype:=TSearchType(lparam mod 65536);
   .
   .
   .
   memory^.Postmessage(memory^.backwnd,backmsg,wparam,lparam);
   
   //hier noch anfügen (um die exception Behandlung wieder zu entfernen, wenn alles klar gelaufen ist)
   asm
     xor edx,edx
     pop dword ptr fs:[edx]
     pop edx
     pop edx
  end;
  
 end else begin
   //Wenn oben irgendetwas schief läuft (z.B. EAccessViolation) dann springt er zurück in den Assemblercode ganz oben
   //und dort wird isexception auf true gesetzt, damit er nacher hier landet
   //und hier können wir jetzt exceptionbehandlung betreiben
   //in dem fall einfach ne Message schicken, dass ein fehler passiert ist
   memory^.Postmessage(memory^.backwnd,errormsg,wparam,lparam);
   //ErrorMsg muss noch als Konstante definiert werden
 end;

end;
ErrorMsg im Hauptprigramm bearbeiten:
Delphi-Quellcode:
const ErrorMsg=ImageMsg+6; //oder so ähnlich
...
type Tform1....
    ...
    procedure GetErrorMsg(var msg:TMessage);message ErrorMsg;
    ...
end;

...

procedure Tform1.getErrorMsg(var msg:TMessage);
begin
  if cardinal(msg.wparam)=EXCEPTION_ACCESS_VIOLATION then
    memo1.lines.add('Error: EAccessViolation @'+inttohex(msg.lparam,8))
  else
    memo1.lines.add('Error: '+inttohex(msg.wparam,8)+' @'+inttohex(msg.lparam,8));
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz