Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

402
Vistas
¿Puedo conectar un objeto de interoperabilidad COM .NET 5 con VB6?

He estado investigando sobre la interoperabilidad COM de .NET Core y cómo exponerlos .

Aunque tengo algunos problemas para llegar a una conclusión y comprender algunos conceptos. Mi jefe me dijo que hicieron algunas pruebas y pensaron que la única forma de crear código C# al que se pudiera llamar desde VB6 (incluidos los eventos) era crear un proyecto de .NET Framework, ya que no estaba disponible en .NET Core 3.1 (en el momento en que tuvieron que usar esta función).

Pero al ver la página mencionada anteriormente y al investigar un poco más, creo que parece que .NET Core es compatible con esta interoperabilidad. Y no entiendo por qué la plataforma .NET Core no podría hacer esto.

Lo siento si esta pregunta no va aquí, pero ¿alguien podría arrojar algo de luz sobre este tema?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

.NET Framework, .NET Core 3+ y .NET 5+ pueden exponer un objeto COM al mundo COM. Este mundo incluye VB6 y todo lo que puede hacer COM.

a) Cree un proyecto de biblioteca de clases .NET 5 "NetClassLibrary" (utilizando Visual Studio, por ejemplo)

b) Agregue un archivo NetComObject.cs con el siguiente código, por ejemplo:

 using System; using System.Runtime.InteropServices; namespace NetClassLibrary { [ComVisible(true)] [Guid("cfb2ee8b-f2ec-447c-9f0d-ac19c9a6cc26")] // TODO: change this GUID public class NetComObject { public string SayHello() => "Hello World from .NET " + RuntimeInformation.FrameworkDescription; } }

c) Modifique .csproj para establecer la propiedad EnableComHosting en true y asegúrese de compilar para x86 ya que VB6 es un programa de 32 bits (tenga en cuenta que si usa VBA de 64 bits de Excel, no VB6, debe compilar para 64 bits) , así por ejemplo:

 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> <EnableComHosting>true</EnableComHosting> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PlatformTarget>x86</PlatformTarget> </PropertyGroup> </Project>

d) Compile, inicie un indicador de administración y ejecute esto:

 regsvr32 yourPathTo\NetClassLibrary.comhost.dll

ingrese la descripción de la imagen aquí

e) Cree un proyecto VB6, agregue este código VB6:

 Private Sub Form_Load() Dim obj As Object Set obj = CreateObject("new:{cfb2ee8b-f2ec-447c-9f0d-ac19c9a6cc26}") // TODO: use the same GUID! MsgBox obj.SayHello() End Sub

f) Ejecutar

ingrese la descripción de la imagen aquí

Nota 1: también puede usar un atributo ProgId , como lo hacen a menudo los objetos COM, no tiene que ceñirse solo a Guids...

Nota 2: solo he usado la interfaz IDispatch ("Lazy Loading") para esta demostración, pero también puede usar interfaces derivadas de IUnknown ("Early Loading") y TLB. Desafortunadamente, .NET 5 no crea el .TLB por usted, tendrá que construirlo usted mismo o crearlo con otra herramienta e importarlo en .NET y/o en VB6.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda