Domanda

Ho creato una DLL .NET che rende visibili alcuni metodi COM.

Un metodo è problematico. Sembra così:

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

VB6 dà un errore di compilazione quando provo a chiamare il metodo:

  

Funzione o interfaccia contrassegnate come   limitato o la funzione utilizza un   Tipo di automazione non supportato in   Visual Basic.

Ho letto che i parametri dell'array devono essere passati per riferimento, quindi ho modificato il primo parametro nella firma:

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

VB6 fornisce ancora lo stesso errore di compilazione.

Come posso modificare la firma per essere compatibile con VB6?

È stato utile?

Soluzione

Dichiarazione dell'argomento array con " ref " è obbligatorio. Il tuo secondo tentativo avrebbe dovuto funzionare bene, forse hai dimenticato di rigenerare il .tlb?

Codice testato:

[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)

Altri suggerimenti

Prova

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

Qualcosa di correlato a questo era il mio problema. Ho un metodo in C # con la seguente firma:

public long ProcessWiWalletTransaction(ref IWiWalletTransaction wiWalletTransaction)

VB 6 ha continuato a lamentarsi "Funzione o interfaccia contrassegnate come limitate ..." e ho pensato che fosse il mio oggetto personalizzato che uso nella chiamata. Si scopre che VB 6 non può fare a lungo, ha dovuto cambiare la firma in:

public int ProcessWiWalletTransaction(ref IWiWalletTransaction wiWalletTransaction)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top