Seite 2 von 2

Verfasst: 19.09.2004 22:33
von Franky
Das mit dem Delay war eigentlich ne "Notlösung", es war spät,ich wollte fertig werden, kein Problem, ich werd da morgen was ändern, dann läufts überall :wink:

Verfasst: 20.09.2004 17:25
von ts-soft
@Franky

Habe Deinen Code überarbeitet. Funktioniert Wahlweise mit
einer Library oder einer DLL. Sources und Dateien kannste ja mal
downloaden:

http://de.geocities.com/ts_softde/Debugger.zip

Kannste auch auf Deiner Homepage verwenden, da ich die Datei
bei mir bald wieder entferne!

Verfasst: 20.09.2004 18:00
von Franky

Code: Alles auswählen

  While adr = 0
      adr = FindWindow_(0,  "miniDebugger")
    Wend
Bild

Und ich quäl mich hier die ganze zeit ab, die Processid mittels Runprogram zu
übergeben und dann auf antwort zu warten.
Manchmal sieht man echt den Wald vor lauter Bäumen nicht /:->

Danke, dass du mich von meinem Leiden erlöst hast :allright:

Verfasst: 20.09.2004 18:17
von ts-soft
@Franky

Ist aber auch nicht Perfekt, da wenn die Exe nicht gefunden wird,
wird das Programm nicht beendet und bleibt im Speicher.

Also Versuch mal Deine Lösung weiter zu verfolgen!

Gruß Thommy

Verfasst: 21.09.2004 09:18
von ts-soft
Habe Deine Idee mit der Debugger-DLL nochmal durchdacht, und eine großen Denkfehler bemerkt. Das Ausgabefenster, zum Debuggen, kann doch direkt in der DLL erzeugt werden! Habe folgenden Code dazu entwickelt:

Code: Alles auswählen

Global frmDebugger.l 
Global lvDebug.l 
 
Procedure MyOnlyOne(MutexName.s) 
  result = CreateMutex_(0, 0, @MutexName) 
  If GetLastError_() = #ERROR_ALREADY_EXISTS 
    ReleaseMutex_(result) 
    CloseHandle_(result) 
    End 
  EndIf 
  ProcedureReturn result 
EndProcedure 
Procedure MySetTopWindow(Window.l) 
  Pos.RECT 
  GetWindowRect_(WindowID(Window), Pos) 
  SetWindowPos_(WindowID(Window), #HWND_TOPMOST, Pos\left, Pos\top, WindowWidth(), WindowHeight(), 0) 
EndProcedure 
Procedure MyCallBack(WindowID, message,wParam,lParam) 
  Select message 
    Case #WM_CLOSE 
      CloseWindow(frmDebugger) 
    Case #WM_SIZE 
      ResizeGadget(lvDebug, 0, 0 , WindowWidth(), WindowHeight()) 
  EndSelect 
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure 
 
ProcedureDLL AttachProcess(dummy.l) ; Initialisierung der DLL 
  frmDebugger = OpenWindow(#PB_Any, 200, 200, 200, 200, #PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget, "miniDebugger") 
  MySetTopWindow(frmDebugger) 
  CreateGadgetList(WindowID()) 
  lvDebug = ListViewGadget(#PB_Any, 0, 0, 200, 200) 
  SetWindowCallback(@MyCallBack()) 
EndProcedure 
ProcedureDLL DebugS(string.s); Gibt den angegebenen String im Debugfenster aus 
  AddGadgetItem(lvDebug, -1, string) 
EndProcedure 
ProcedureDLL DebugL(wert); Gibt den angegebenen Longwert im Debugfenster aus 
  AddGadgetItem(lvDebug, -1, Str(wert)) 
EndProcedure 
ProcedureDLL DebugC(); Löscht das Debugfenster (Inhalt) 
  ClearGadgetItemList(lvDebug) 
EndProcedure


Gruß Thommy

Edit by NicTheQuick: Code-Tags gesetzt

Verfasst: 21.09.2004 15:10
von Franky
Die Sache mit dem Denkfehler weise ich von mir :wink:

Wenn man das Fenster in der DLL erzeugt, schließt es sich bei einem Programmabsturz automatisch mit, das ist ja gerade das, was ich NICHT will :|