Hoy estaba depurando una aplicación en mi trabajo. Procedí a establecer un punto de interrupción en uno de mis bloques catch para inspeccionar una excepción con más detalle.
La ventana modal View Detail
detalles se abre normalmente, pero en lugar de mostrarme los detalles de la excepción, me arroja un error extraño, uno que nunca obtuve, ni sé lo que significa:
El error dice:
El nombre '$excepción' no existe en el contexto actual
Esto es frustrante porque estoy dentro del alcance del bloque catch, por lo que debería poder ver mi excepción.
Después de reiniciar mi aplicación, logré depurarla muy bien. Esta fue la única vez (hasta ahora) que recibí este error.
¿Alguien sabe qué significa y cómo puedo solucionarlo (sin tener que reiniciar la aplicación)?
NOTA : estoy usando Visual Studio 2012 Premium . Versión 11.0.61030.00 Actualización 4
Intente decirle explícitamente al compilador cómo importar el dll. Ex:
using System; using System.Runtime.InteropServices; namespace BitmapProcessingCs { public static class NativeMethods { [DllImport("BitmapProcessingCpp.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void GenerateBitmap(IntPtr src, int dimension); } }
Resolví el mismo problema en estos pasos:
paso 1) Si programa su archivo DLL personalizado en C++ con Visual Studio, luego, en la página de propiedades de su proyecto, establezca el parámetro Common Language Runtime Support (/clr)
en Common Language Runtime Support (/clr)
.
paso 2) Para hacer funcionar la desaceleración en el archivo .h
, use la palabra clave __declspec(dllexport)
como se muestra a continuación:
__declspec(dllexport) double Sub(int a,int b);
paso 3) Cree y exporte el archivo DLL, luego use el software Dependency Walker para obtener su función EntryPoint .
paso 4) Importe el archivo DLL en el proyecto C# y establezca la variable EntryPoint y CallingConvention como se muestra a continuación:
[DllImport("custom.dll", EntryPoint = "?Sub@@Y234NN@Z", CallingConvention = CallingConvention.Cdecl)] public static extern double Sub(int a,int b);
Eche un vistazo a la biblioteca de MSDN: https://msdn.microsoft.com/en-us/library/ms164891.aspx
Según ellos, obtendrá una excepción si intenta evaluar un objeto de excepción si no ha ocurrido ninguna excepción. Pero, dado que está en el bloque catch, se produjo una excepción... Sin ver el código, es difícil de adivinar, pero ¿es posible que tenga varios subprocesos en ejecución y la excepción fue consumida por un subproceso antes de ser manejada? ¿por otro? Realmente no tiene sentido, pero vale la pena mirar. Una opción segura (r) sería asegurarse de verificar si la excepción es nula en su registrador, antes de intentar obtener detalles de él. También vale la pena mirar: HttpRequestException contiene una excepción interna, ¿cuál podría ser la fuente de su referencia nula? Solo especulando.