# DLL debuggen



## jccTeq (6. August 2007)

Hi Leute,

ist es möglich (wenn ja, wie?), eine in Visual Studio (C++) entwickelte COM DLL, die aus MS Excel heraus angesprochen wird, im VS Debugger zu debuggen? Ich hab ein Problem mit der DLL, das leider nur auftritt, wenn ich sie aus einem Office Programm heraus aufrufe. Das Problem tritt nicht auf, wenn ich einen selbstgeschriebenen kleinen Client verwende. 

Konkret handelt es sich um einen eigenimplementierten OleDB Provider. Der funktioniert im eigenen Client ganz vorzüglich, liefert alle Daten. MS Excel jedoch bringt er ab einer undefinierbaren Anzahl Datensätze im Recordset zum Absturz. Außerdem scheinen im Recordset einige Datensätze zu fehlen.

Hat da jemand 'ne Erklärung zu, Tipps, oder kann mir verraten, wie ich so eine DLL debuggen kann?

Danke!

Grüße,
Hendrik


----------



## LukeS (6. August 2007)

Ich hab mal vor einiger Zeit mit DLL's herumgespielt. Bin aber bei weitem kein Experte.
Beim Ausführen der DLL "Debuggen Starten" (F5) kannst du dann das Programm wählen, in dem die DLL geladen werden soll.
Soweit ich mich errinnere musst du dann aber in dem Programm (Excel) die DLL manuell laden.
Im Hintergrund läuft dann der Debugger von Visual Studio.

Gruss LukeS


----------



## Endurion (7. August 2007)

Wenn die DLL nicht direkt beim Aufruf absemmelt, kannst du dich von Visual Studio aus an den Prozess attachen (gibt da einen Eintrag im Debug-Menü). Du wählst da Excel bzw. deine DLL aus und müßtest da direkt reinspringen können.


----------



## jccTeq (7. August 2007)

Uuuaaahh... was ist das denn? Gestern ging's noch mit der von LukeS vorgeschlagenen Methode. Hab das DLL Projekt als Startprojekt angegeben und als Befehl MS Excel gestartet mit einer Arbeitsmappe, die bereits schon die entsprechende DLL verwendet. Gestern ging alles noch... heute, einige Stunden und keinen einzigen Schritt weiter, geht's auf einmal nicht mehr. 

Ich kann zwar Haltepunkte setzen innerhalb der DLL (was gestern auch problemlos funktionierte), diese werden allerdings heute (gestern noch nicht) mit einem gelben Ausrufezeichen versehen, mit dem Hinweis:



> Der Haltepunkt wird momentan nicht erreicht. Für dieses Dokument wurden keine Symbole geladen.



... *und ignoriert.*

Ich hab nichts am Projekt verändert, nichts im Source, nichts in den Einstellungen (gegenüber gestern, wo's noch lief), nichts an der Arbeitsmappe etc... Nur beendet und neu gestartet hab ich das Visual Studio in der Zwischenzeit. 

Gewählte Konfiguration ist *"Debug"*, Debugsymbole sollen laut Befehlszeile erstellt werden... es MÜSSTE also theoretisch funktionieren, wie gestern. Tut's aber nicht. Woran kann's liegen? 

Bin am Verzweifeln hier...

Grüße,
Hendrik


----------



## jccTeq (8. August 2007)

Also weiter geht's:

Die DLL ist ein selbstimplementierter OleDB Provider. Dieser Provider stellt Anwendungen, die mit ADODB arbeiten eine Schnittstelle zu von uns gelieferten Daten zur Verfügung. Da die Abfrage der Daten asynchron über ein weiteres COM Interface erfolgt, werden die Records in einem Event innerhalb der DLL zum Rowset hinzugefügt. Die DLL blockiert solange, Excel ebenfalls. Das funktioniert soweit auch...

... bis zu einem gewissen Punkt. Ab einer bestimmten Anzahl Datensätze bekomme ich im Visual Studio Debugger die Exception 



> AtlThrow: hr = 0x8007000e
> Eine Ausnahme (erste Chance) bei 0x7c812a5b in EXCEL.EXE: Microsoft C++-Ausnahme: ATL::CAtlException an Speicherposition 0x000ac7e8..



geworfen. 

Gibt es da irgendwelche Begrenzungen in ATL/OleDB, die ich nicht überschreiten darf? 

Danke


----------

