usar proyecto net agregar .net arrays com vb6 assemblies

.net - net - agregar dll a proyecto c#



Llamar a métodos.NET desde VB6 a través de DLL visible COM (3)

Creé una DLL .NET que hace visibles algunos métodos COM.

Un método es problemático. Se parece a esto:

bool Foo(byte[] a, ref byte[] b, string c, ref string d)

VB6 produce un error de compilación cuando intento llamar al método:

Función o interfaz marcada como restringida, o la función utiliza un tipo de Automatización no compatible con Visual Basic.

Leí que los parámetros de la matriz se deben pasar por referencia, así que modifiqué el primer parámetro en la firma:

bool Foo(ref byte[] a, ref byte[] b, string c, ref string d)

VB6 todavía da el mismo error de compilación.

¿Cómo puedo modificar la firma para que sea compatible con VB6?


Algo relacionado con esto fue mi problema. Tengo un método en C # con la siguiente firma:

public long ProcessWiWalletTransaction(ref IWiWalletTransaction wiWalletTransaction)

VB 6 siguió quejándose "Función o interfaz marcada como restringida ..." y supuse que era mi objeto personalizado que uso en la llamada. Resulta que VB 6 no puede hacer mucho, tuvo que cambiar la firma a:

public int ProcessWiWalletTransaction(ref IWiWalletTransaction wiWalletTransaction)


Se requiere declarar el argumento de la matriz con "ref". Tu segundo intento debería haber funcionado bien, quizás olvidaste regenerar .tlb?

Código probado:

[ComVisible(true)] public interface IMyInterface { bool Foo(ref byte[] a, ref byte[] b,string c, ref string d); } [ComVisible(true)] public class MyClass : IMyInterface { public bool Foo(ref byte[] a, ref byte[] b, string c, ref string d) { throw new NotImplementedException(); } } Dim obj As ClassLibrary10.IMyInterface Set obj = New ClassLibrary10.MyClass Dim binp() As Byte Dim bout() As Byte Dim sinp As String Dim sout As String Dim retval As Boolean retval = obj.Foo(binp, bout, sinp, sout)


Tratar

[ComVisible(true)] bool Foo([In] ref byte[] a, [In] ref byte[] b, string c, ref string d)