Calling .NET methods from VB6 via COM visible DLL

一笑奈何 提交于 2019-11-28 12:53:51

Declaring the array argument with "ref" is required. Your 2nd attempt should have worked just fine, perhaps you forgot to regenerate the .tlb?

Tested code:

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

Try

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

Something related to this was my problem. I have a method in C# with the following signature:

public long ProcessWiWalletTransaction(ref IWiWalletTransaction wiWalletTransaction)

VB 6 kept on complaining "Function or interface marked as restricted ..." and I assumed it was my custom object I use in the call. Turns out VB 6 can not do long, had to change the signature to:

public int ProcessWiWalletTransaction(ref IWiWalletTransaction wiWalletTransaction)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!