Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
[Tutorial] C# Interoperabilidad COM, parte 2
#1
Visual Studio .NET 2003
La interoperabilidad COM permite a los programadores de COM obtener acceso al código administrado igual de fácilmente que con otros objetos COM. Este tutorial muestra el uso de un servidor C# con un cliente COM de C++. También explica las actividades siguientes:

Cómo crear el servidor de C#
Cómo crear el cliente COM
El tutorial también trata brevemente el cálculo de referencias aplicado automáticamente entre los componentes administrados y no administrados.

Interoperabilidad COM, parte 1: tutorial de clientes de C# muestra los fundamentos del uso de C# para interactuar con objetos COM y es un requisito previo para poder seguir este tutorial. Para ver información general sobre ambos tutoriales, vea Tutoriales de interoperabilidad COM.

Archivos de ejemplo

Vea Interoperabilidad COM, parte 2: Ejemplo para descargar y generar los archivos de ejemplo que se utilizan en este tutorial.

Información adicional

Atributos de C#
17. Atributos
Interoperabilidad COM avanzada
System.Runtime.InteropServices (Espacio de nombres)
Resumen de la conversión de una biblioteca de tipos en ensamblado
Herramienta Assembly Registration (Regasm.exe)
Herramienta Type Library Importer (Tlbimp.exe)
Cálculo de referencias para interoperabilidad
Tutorial de "Interoperabilidad COM, parte 1: cliente de C#"
Tutorial

Este tutorial muestra los siguientes pasos para la creación del servidor de C#:

Cómo utilizar el atributo Guid en interfaces y clases para exponerlas como objetos COM, y cómo generar un identificador único global (GUID) para el atributo Guid.
Cómo utilizar RegAsm para registrar un programa de .NET Framework para su uso por clientes COM, y cómo crear una biblioteca de tipos (archivo .tlb) desde un programa de .NET Framework.
El tutorial también enseña los pasos siguientes para crear el cliente COM:

Cómo exportar servidores administrados y cómo utilizarlos para crear objetos COM.
Cómo importar el archivo .tlb, generado por RegAsm, en el cliente COM y cómo usar CoCreateInstance para crear una instancia de una coclase de .NET Framework.
Nota Para crear un identificador GUID de interfaces y coclases que vaya a exportar a clientes COM, utilice la herramienta Guidgen.exe, que se incluye en Visual Studio. Guidgen permite elegir el formato que tendrá el identificador GUID para que no sea necesario volver a escribirlo. Para obtener más información sobre Guidgen, vea el artículo de Knowledge Base Q168318 "XADM: Guidgen.exe Available Only for Intel Platforms". Los artículos de Knowledge Base están disponibles en la MSDN Library y en el Web, en http://www.microsoft.com/spanish/soporte/.
Ejemplo

Este ejemplo consta de dos archivos:

Un archivo de C#, CSharpServer.C#, que crea el archivo CSharpServer.dll. El archivo .dll se usa para crear CSharpServer.tlb.
Un archivo de C++, COMClient.cpp, que crea el cliente ejecutable, COMClient.exe.
Archivo 1: CSharpServer.cs

// CSharpServer.cs
// compile with: /target:library
// post-build command: regasm CSharpServer.dll /tlb:CSharpServer.tlb

using System;
using System.Runtime.InteropServices;
namespace CSharpServer
{
// Since the .NET Framework interface and coclass have to behave as
// COM objects, we have to give them guids.
[Guid("DBE0E8C4-1C61-41f3-B6A4-4E2F353D3D05")]
public interface IManagedInterface
{
int PrintHi(string name);
}

[Guid("C6659361-1625-4746-931C-36014B146679")]
public class InterfaceImplementation : IManagedInterface
{
public int PrintHi(string name)
{
Console.WriteLine("Hello, {0}!", name);
return 33;
}
}
}
Archivo 2: COMClient.cpp

// COMClient.cpp
// Build with "cl COMClient.cpp"
// arguments: friend

#include <windows.h>
#include <stdio.h>

#pragma warning (disable: 4278)

// To use managed-code servers like the C# server,
// we have to import the common language runtime:
#import <mscorlib.tlb> raw_interfaces_only

// For simplicity, we ignore the server namespace and use named guids:
#if defined (USINGPROJECTSYSTEM)
#import "..\RegisterCSharpServerAndExportTLB\CSharpServer.tlb" no_namespace named_guids
#else // Compiling from the command line, all files in the same directory
#import "CSharpServer.tlb" no_namespace named_guids
#endif
int main(int argc, char* argv[])
{
IManagedInterface *cpi = NULL;
int retval = 1;

// Initialize COM and create an instance of the InterfaceImplementation class:
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_InterfaceImplementation,
NULL, CLSCTX_INPROC_SERVER,
IID_IManagedInterface, reinterpret_cast<void**>(&cpi));

if (FAILED(hr))
{
printf("Couldn't create the instance!... 0x%x\n", hr);
}
else
{
if (argc > 1)
{
printf("Calling function.\n");
fflush(stdout);
// The variable cpi now holds an interface pointer
// to the managed interface.
// If you are on an OS that uses ASCII characters at the
// command prompt, notice that the ASCII characters are
// automatically marshaled to Unicode for the C# code.
if (cpi->PrintHi(argv[1]) == 33)
retval = 0;
printf("Returned from function.\n");
}
else
printf ("Usage: COMClient <name>\n");
cpi->Release();
cpi = NULL;
}

// Be a good citizen and clean up COM:
CoUninitialize();
return retval;
}
Resultado

El cliente ejecutable puede invocarse con la línea de comandos: COMClient <name>, donde <name> es cualquier cadena que desee utilizar, como por ejemplo COMClient friend.

Calling function.
Hello, friend!
Returned from function.
En el ejemplo proyecto IDE, establezca la propiedad Argumentos de la línea de comandos a la cadena deseada (por ejemplo, "amigo") en las páginas


Posibles temas similares...
Tema Autor Respuestas Vistas Último mensaje
Información [Tutorial] Certificado SSL Gratis StartSSL 2016 Tutorial DarkMaster 26 5,112 28-04-2016, 03:39 AM
Último mensaje: Lob3zNo
  [Tutorial] Trucos con CSS parte I JancoBH 2 362 13-03-2016, 01:00 AM
Último mensaje: JancoBH
Bombilla [Tutorial] SSL Gratis, Conseguir e Instalar Certificado DarkMaster 16 871 06-01-2016, 01:32 AM
Último mensaje: DarkMaster
  [PUBLICO] Tutorial Botones con perspectiva 3D AngelKrak 0 234 17-01-2015, 05:44 AM
Último mensaje: AngelKrak
  como dominar CSS sin salir del escritorio parte 1 postnix 20 2,145 02-06-2014, 12:33 PM
Último mensaje: piinbook
  [Tutorial] Aumentar el Tamaño Máximo al Cargar Archivos con PHP y Apache papanoel 0 668 22-01-2014, 04:38 AM
Último mensaje: papanoel
  50 Herramientas de Diseño Web Gratis! [Parte 3] lukas 2 708 03-07-2013, 09:45 PM
Último mensaje: lukas
  50 Herramientas de Diseño Web Gratis! [Parte 1] lukas 2 454 18-06-2013, 10:59 PM
Último mensaje: fercol
  50 Herramientas de Diseño Web Gratis! [Parte 2] lukas 0 504 18-06-2013, 07:35 PM
Último mensaje: lukas
  Guía de Referencia Rápida de CSS 3 [Parte 1] Static-X 14 2,049 13-04-2013, 11:05 PM
Último mensaje: Infamer



Usuarios navegando en este tema: 1 invitado(s)