AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Debugging rund um ein 3rd-party COM-Objekt
Thema durchsuchen
Ansicht
Themen-Optionen

Debugging rund um ein 3rd-party COM-Objekt

Offene Frage von "OldGrumpy"
Ein Thema von OldGrumpy · begonnen am 12. Okt 2006 · letzter Beitrag vom 13. Okt 2006
Antwort Antwort
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#1

Debugging rund um ein 3rd-party COM-Objekt

  Alt 12. Okt 2006, 14:40
Hallo zusammen,

momentan steh ich echt vor einem ordentlichen Problem. Ich habe eine Applikation die auf ein 3rd-party COM-Objekt zugreift. Zu diesem COM-Objekt habe ich nur eine relativ magere Doku, die Typelib musste ich mir selbst extrahieren. Die generierte Typelib war dann nicht mal in Delphi kompilierbar, ich bekam bei manchen Funktionen die Fehlermeldung dass Getter und Setter unterschiedliche Datentypen verwenden würden, was unzulässig sei. Das habe ich dann durch Änderungen im PAS-File beheben können, indem ich die fraglichen Variablentypen durch OleVariant ersetzt habe. Nun ist das Problem, dass die Applikation bei mir wunderbar funktioniert (auf dem Entwicklungssystem und einem Testrechner), ich aber von mehreren Usern Rückmeldung bekam, dass die Applikation sich teilweise seltsam verhält, abstürzt oder den Dienst verweigert.

Meine Applikation ist dabei recht codearm und quasi nur ein Frontend zur Bedienung des COM-Objektes, daher bin ich mir ziemlich sicher, dass das Problem irgendwo in der Kommunikation mit dem COM-Objekt liegen muss. Erratisches Verhalten ist ziemlich häufig ein Signal dafür, dass auf dem Stack oder Heap nicht alles mit rechten Dingen zugeht.

Meine Frage dazu wäre nun, kann ich irgendwie quasi live Sachen wie Stackpointer vor und nach COM-Aufruf usw. protokollieren um zu sehen ob es da irgendwelche Probleme gibt? Gibt es Diagnoseunits oder ähnliches was mir hier helfen könnte? Ich kanns natürlich auch per Hand in Softice oder WinDbg Schritt für Schritt debuggen, aber der Zeitaufwand erscheint mir da deutlich höher.

Ich hab schon etwas rumgegoogled, aber nichts wirklich hilfreiches gefunden, daher frage ich jetzt einfach mal rum ob schon jemand in dem Bereich mal experimentiert hat

Evtl. liegt es ja auch an meinen Änderungen in der Typelib, ich kann bei Bedarf Original und meine Version zur Verfügung stellen. Nach meinem Wissensstand müssten die Änderungen aber alle korrekt sein. (Ja, ich weiss dass ich nichts weiss)

Für jegliche Tipps, Pointer, Hinweise usw. bin ich herzlich dankbar!
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Debugging rund um ein 3rd-party COM-Objekt

  Alt 12. Okt 2006, 14:49
Wenn da auch Exceptions auftreten könntest du ja mal probieren das ganze mit MadExcept (www.madshi.net) zu kompilieren, dann wird bei einem Fehler so einiges angezeigt.
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Debugging rund um ein 3rd-party COM-Objekt

  Alt 12. Okt 2006, 14:59
Ich kriege leider überhaupt keine Exceptions. Wenn da was geworfen würde, könnte ich das Problem schon näher eingrenzen. Aber momentan steh ich echt dumm da, ich finde keinen ordentlichen Ansatzpunkt

Es ist ja auch nicht auszuschließen, dass ich einen Fehler jage, den ich gar nicht zu verantworten habe (Bug im COM-Objekt z.B.), aber bevor ich mich darauf zurückziehe, möchte ich erstmal alles Erdenkliche auf meiner Seite checken.

Der Ärger begann ja schon, als die letzte Version eine Typelib hatte, die ich in Delphi nicht ohne Handarbeit kompiliert bekam. Da musste ich ja wie oben beschrieben erst nachhelfen, vielleicht liegt das Problem ja da. Ich bin in COM mit Delphi noch nicht so firm, es sieht immer super einfach und simpel aus, aber in Wirklichkeit sind nur die Stolpersteine besser versteckt
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Debugging rund um ein 3rd-party COM-Objekt

  Alt 12. Okt 2006, 15:34
Du könntest auch ganz ohne TLB und zugehöriger _TLP.pas Datei arbeiten. (nur über Dispatch-Interface)
Du brauchst natürlich das Tool OLE View, damit du weisst welche Interfaces, Methoden und Properties verfügbar sind.
Dann hättest du die Möglichkeit auch ein VB-Script zu verwenden, um Probleme in der ActiveX-DLL nachzuweisen.
Das VB-Script wird vom Hersteller garantiert akzeptiert, da ja der Sourcecode völlig offen liegt.
Damit gehst du dann zum Hersteller und sagst: "bringt das mal in Ordnung".
Wenn du ein Delphiprogramm schickst, dann glauben dir die Leute erst mal nicht.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Debugging rund um ein 3rd-party COM-Objekt

  Alt 12. Okt 2006, 15:45
Das wäre auch noch ne Möglichkeit, an die hatte ich noch gar nicht gedacht, bin wohl in letzter Zeit zu faul geworden *lach* - Der Typelib-Importer macht einem die Benutzung halt so einfach. Allerdings hab ich in Delphi noch kein COM-Objekt komplett zu Fuss benutzt, hast Du dafür ein Beispiel zur Hand?
Vor allem interessiert mich halt auch was und ob ich selber abraeumen muss.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Debugging rund um ein 3rd-party COM-Objekt

  Alt 12. Okt 2006, 15:57
Zitat von OldGrumpy:
Allerdings hab ich in Delphi noch kein COM-Objekt komplett zu Fuss benutzt, hast Du dafür ein Beispiel zur Hand?
Vor allem interessiert mich halt auch was und ob ich selber abraeumen muss.
Du brauchst nur den Datentyp OleVariant zu benützen (statt Interface-Pointer).
Aufräumenarbeiten werden von COM erledigt.
Delphi-Quellcode:
var
   dasobjekt : OleVariant;
begin
   dasobjekt := CreateOleObject('Winword.Application');
   dasobjekt.IrgendeineMethode;
   .... := dasobjekt.EinProperty;

   // optional: Objekt selbst freigeben
   dasobjekt := unassigned;
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Debugging rund um ein 3rd-party COM-Objekt

  Alt 12. Okt 2006, 16:28
Ah, nachdem ich erstmal rausgefunden hatte, wie die entsprechenden Klassen meines COM-Objektes heissen (bzw. was ich genau bei CreateOleObject als Parameter angeben muss) werd ich jetzt mal testen. Ich muss ne ganze Menge Code umschreiben, um zu sehen ob das die Fehler beseitigt. Ich melde mich wieder sobald ich näheres weiss. Erstmal herzlichen Dank für die Infos!
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: Debugging rund um ein 3rd-party COM-Objekt

  Alt 12. Okt 2006, 18:07
Zitat von OldGrumpy:
Ich muss ne ganze Menge Code umschreiben, um zu sehen ob das die Fehler beseitigt.
Ich würd' nicht umschreiben, sondern das Bisherige erhalten und das Neue hinzu nehmen.
Delphi-Quellcode:
const USE_DISPATCH = TRUE
procedure TForm1.Button1click(...);
begin
   if USE_DISPATCH then
      TesteDasCOMObjekt_Dispatch
   else
      TesteDasCOMObjektMitTlb;
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Debugging rund um ein 3rd-party COM-Objekt

  Alt 13. Okt 2006, 07:50
Ja, in der Art hatte ich das auch vor, so eine Weiche zählt für mich schon zum Umschreiben
Ausserdem muss ich dann einige ändern weil die Typelib als Package installiert ist und 2/3 der verwendeten Interfaces auf den Forms liegen. Könnte das auch eine Ursache für die Probleme sein? Ich bin noch nicht lange genug mit Delphi unterwegs, um die ganzen typischen Knackpunkte zu kennen. So wirklich viele Infos gibts da auch nicht konzentriert (zumindest habe ich da noch nix passendes gefunden), ich muss mir vieles Stückchen für Stückchen aus Foren zusammensuchen usw...

Naja, ich bau jetzt erstmal meine Units entsprechend um. Und dann muss da auch noch nen neuer AVI-Parser rein. Das was mein Vorgänger da verbrochen hat, schreddert ohne mit der Wimper zu zucken manche Header beim Versuch, den 4CC zu ändern. Arbeitet mit statischen Offsets und hat keinerlei Plausi-Checks. *grusel*
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  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 11:13 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