Tengo el control SAP RPC OCX que me gustaría usar. En C# 4 siguiente código funciona bien:Dinámico vs Typed produce resultados extraños
System.Type t = System.Type.GetTypeFromProgID("SAP.Functions", true);
dynamic fc = System.Activator.CreateInstance(t, false);
dynamic connection = fc.Connection;
connection.System = "";
siguiente código no funciona (a pesar de que la conexión no es nulo)
System.Type t = System.Type.GetTypeFromProgID("SAP.Functions", true);
dynamic fc = System.Activator.CreateInstance(t, false);
var connection = fc.Connection as SAPLogonCtrl.Connection
connection.System = "";
de error se lanza: "Intento de leer o escribir en la memoria protegida Esto a menudo es una indicación de que otra memoria está corrupta ".
El hecho más extraño es esto, sin embargo: se ejecuta
System.Type t = System.Type.GetTypeFromProgID("SAP.Functions", true);
dynamic fc = System.Activator.CreateInstance(t, false);
dynamic c1 = fc.Connection;
var c2 = fc.Connection as SAPLogonCtrl.Connection;
if (c1 == c2)
c2.System = "";
Última línea de tiros y la misma excepción !!! Reemplazar c2 con c1 funciona como se esperaba ...
Siento que me falta algo trivial y, sin embargo, estoy en una pérdida completa ... ¿Por favor ayuda?
Otros detalles: El cambio de :
dynamic fc = System.Activator.CreateInstance(t, false);
a:
var fc = System.Activator.CreateInstance(t, false) as SAPFunctionsOCX.SAPFunctions;
no hace ninguna diferencia. c1 todavía funciona y c2 todavía no funciona.
Información adicional n. ° 2: El cambio de propiedades en FC también funciona en ambos casos.
Por favor, nos muestran lo que la siguiente vuelta: 'c1.GetType ToString()()' y 'c2.GetType (.) .ToString() '. –
Ambos devuelven System .__ ComObject –
Estoy haciendo una toma en la oscuridad aquí, pero tal vez 'fc.Connection' es en realidad una instancia de una clase heredada de' SAPLogonCtrl.Connection'. Es por eso que su 'como' no devuelve nulo y por qué está viendo un comportamiento diferente. A lo que Daniel intentaba llegar preguntando los tipos. – Greg