2008-09-24 4 views
6

Ich entwickle eine C# -Assembly, die über COM von einer Delphi 7 (iow, native win32, nicht .net) -Anwendung aufgerufen werden soll.Wie kann ich eine C# COM-Assembly debuggen, wenn sie von einer nativen Win32-Anwendung aufgerufen wird?

Bisher scheint es zu funktionieren. Ich habe eine TLB-Datei exportiert, diese in mein Delphi-Projekt importiert und ich kann mein C# -Objekt erstellen und seine Funktionen aufrufen.

Also das ist großartig, aber bald werde ich gehen wirklich möchte Visual Studio verwenden, um den C# -Code zu debuggen, während es ausgeführt wird. Setze Breakpoints, springe durch den Code, all das Zeug.

Ich habe versucht, in den Delphi-Code einzubrechen, nachdem das COM-Objekt erstellt wurde, und dann nach einem Prozess für VS suchen, an den ich anhängen kann, aber ich kann keinen finden.

Gibt es eine Möglichkeit, VS2008 einzurichten, um dies zu tun? Ich würde es vorziehen, einfach f5 zu drücken und VS die Delphi-Programmdatei starten zu lassen, auf den C# -Code zu warten und sich dann an ihn anzuhängen. Aber ich könnte damit leben, dass ich manuell an einen Prozess angehängt werde, nehme ich an.

Nur bitte sagen Sie mir nicht, dass ich mit MessageBox.Show usw.

Antwort

10

Auf der Seite VS2008-Projekteigenschaften auf der Registerkarte Debug gibt es eine Option zum Festlegen einer anderen Startaktion.

Dies kann verwendet werden, um ein externes Programm (z. B. Ihre Delphi-App) auszuführen, wenn Sie F5 drücken.

+0

Wow, es funktioniert! Vielen Dank. – Blorgbeard

+0

Es ist ziemlich praktisch. Ich entdeckte es beim Schreiben einer C# -Assembly, die aus Excel aufgerufen wurde. –

9

Legen Sie die folgenden in der Methode, die Sie wünschen, zu debuggen machen zu tun haben:

#if DEBUG 
    if (!System.Diagnostics.Debugger.IsAttached) 
     Debugger.Launch(); 
#endif 

Wenn Sie debuggen möchten, Erstellen Sie eine Debug-Version und verwenden Sie diese in Ihrer Anwendung. Wenn dieser Code ausgeführt wird, wird ein Dialogfeld angezeigt, in dem Sie gefragt werden, ob Sie einen Debugger anfügen möchten.

+1

Das ist ein wirklich netter Trick! – Blorgbeard

1

Sie können einfach an die native Anwendung anhängen und Haltepunkt, Stapel, Uhren etc. normalerweise sehen. Sie müssen anhängen, nachdem das COM-Objekt erstellt wurde.

Ich legte eine Afx MsgBox, wenn das Objekt erstellt wird, um den Fluss der Anwendung zu stoppen und dann den Debugger anfügen.

Verwandte Themen