Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

234
Views
¿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 answers
Answer question

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. Lamentablemente, .NET 5 no crea el .TLB por usted, tendrá que compilarlo usted mismo o crearlo con otra herramienta e importarlo en .NET y/o en VB6.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!