Crear objetos COM en diversos lenguajes de programación

¿Qué es COM?

Según la Wikipedia:

Component Object Model (COM) es una plataforma de Microsoft para componentes de software introducida por dicha empresa en 1993. Esta plataforma es utilizada para permitir la comunicación entre procesos y la creación dinámica de objetos, en cualquier lenguaje de programación que soporte dicha tecnología. El término COM es a menudo usado en el mundo del desarrollo de software como un término que abarca las tecnologías OLE, OLE Automation, ActiveX, COM+ y DCOM.

Ejemplos de creación de objetos COM:

PHP

$obj = new COM("nombre-objeto");
$obj->metodonombre();
$obj->atributo = "atributo";

VBScript

Dim obj
Set obj = CreateObject(“nombreObjeto”)
obj.metodo()

Jscript

var obj;
obj = new ActiveXObject("nombreObjeto");

Ruby

Require ‘win32ole’
obj = WIN32OLE.new(‘nombreObjeto’)

Perl

use Win32::OLE;
$my obj = Win32::OLE->new(“nombreObjeto”);

Pascal

Var
objeto: variant;
Objeto := CreateOleObject(“nombreObjeto”);

Ejemplo

El siguiente ejemplo es un validador de documentos XML en PHP (también se puede hacer gracias a COM en otros lenguajes)

if($argc > 1)
{

	if($xmlDOM = new COM("Microsoft.XMLDOM"))
	{

		$xmlDOM->async = "false";
		$xmlDOM->validateOnParse = "true";
		$xmlDOM->load($argv[1]);

		echo "\n[-] Archivo XML cargado\n";
		echo "[-] validando...\n";

		if($xmlDOM->parseError->errorCode == 0)
		{
			echo "[-] No se encontraron errores\n";
			echo "[-] Documento XML valido (congratulations)\n";
		}
		else
		{

			echo "[*] Error: \n";
			echo "\n  Codigo de error: ".$xmlDOM->parseError->errorCode;
			echo "\n  Descripcion del error: ".$xmlDOM->parseError->reason;
			echo "\n  Linea: ".$xmlDOM->parseError->line."\n";

		}
	}
	else
	{
		exit("[*] Error... objeto com no creado.\n");
	}

}
else
{

	echo "XML Validator Coded by Amir Canto  | http://www.algoritmatica.com\n";
	echo "Usage: $argv[0] archivo.xml\n";
	exit(0);
}

Un saludo!.

Si alguien conoce alguno más! Que no dude en hacérnoslo saber! Ayudanos a completar la lista =).

Marty Mc Fly says:

Hola .
Pero para llamar aun servicio del middleware de una dll , desde VB6 como sería? vuelvo si me lo logran contestar…

Diego says:

Esta muy bueno el articulo !!

Me gustaría que tuvieras un ejemplo en Java.

Saludos !!