2008-09-24 8 views
6

Estoy desarrollando un ensamblado C# que se llamará a través de COM desde una aplicación Delphi 7 (iow, win32 nativa, no .NET).¿Cómo puedo depurar un ensamblado C# COM cuando se llama desde una aplicación nativa win32?

Hasta ahora, parece que funciona. He exportado un archivo TLB, lo importé en mi proyecto Delphi y puedo crear mi objeto C# y llamar a sus funciones.

Así que eso es genial, pero pronto voy a realmente quiero usar Visual Studio para depurar el código C# mientras se está ejecutando. Establecer puntos de interrupción, paso por el código, todo eso.

Intenté romper el código Delphi después de crear el objeto COM, luego busqué un proceso para que VS se conectara, pero no puedo encontrar uno.

¿Hay alguna manera de configurar el VS2008 para que haga esto? Prefiero solo poder presionar f5 y hacer que VS inicie el ejecutable Delphi, espere a que se llame el código C# y luego se adjunte a él ... Pero podría vivir con la vinculación manual a un proceso, supongo.

Sólo por favor no me diga que tengo que conformar con MessageBox.Show etc.

Respuesta

10

En la página de propiedades del proyecto VS2008, en la pestaña Depuración, hay una opción para establecer una Acción de inicio diferente.

Esto se puede utilizar para ejecutar un programa externo (por ejemplo, su aplicación Delphi) cuando presiona F5.

+0

¡Guau, funciona! Gracias. – Blorgbeard

+0

Es bastante útil. Lo descubrí cuando escribía un ensamblado C# que se llamaba desde Excel. –

9

Coloque el siguiente en el método que desea depurar:

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

cuando se desea depurar, compila una versión de depuración y úsala en tu aplicación. Cuando se ejecuta este código, aparece un cuadro de diálogo que le pregunta si desea adjuntar un depurador.

+1

¡Ese es un truco muy bueno! – Blorgbeard

1

Puede simplemente conectarse a la aplicación nativa y ver punto de interrupción, ver pilas, relojes, etc. normalmente. Tendrá que adjuntar después de que se crea el objeto COM.

Pongo un Afx MsgBox cuando el objeto se crea para detener el flujo de la aplicación y luego adjunto el depurador.

Cuestiones relacionadas