jueves, 23 de junio de 2011

Emular CreateObject C#

Para aquellos que han programado bastante en VB6 y .Net, VBScript y ASP 3.0 se han topado con la función CreateObject, que permite crear un objecto sin necesidad de hacer referencia directa al mismo de un objecto COM, solo llamando la implementación deseado, por ejemplo myproject.myclass.

En C# es un poco más complicado, ya que para eso debemos primero buscar el ProgID mediante el objeto Type con el que se encuentra registrado el componente en el sistema operativo y a partir de ese ProgID se procede a crear una instancia del componente, un poco distinto al createobject que se encarga de realizar estas dos acciones.
///
/// Creates a COM object given it's ProgID.
/// /// The ProgID to create
/// The newly created object, or null on failure.
public static object COMCreateObject (string oProgID)
{
 // We get the type using just the ProgID
 Type oType = Type.GetTypeFromProgID (oProgID);
 if (oType != null)
 {     
  return Activator.CreateInstance(oType);
 }
   
 return null;
}

2 comentarios:

Souliaq dijo...

El problema con esto, es que .NET genera errores en tiempo de compilación. Las propiedades y métodos, obviamente no quedan "tipificadas", y por lo tanto no se pueden acceder a estas.

Souliaq dijo...

El problema con esto, es que .NET genera errores en tiempo de compilación. Las propiedades y métodos, obviamente no quedan "tipificadas", y por lo tanto no se pueden acceder a estas.