Calling .NET methods from VB6 via COM visible DLL


Calling .NET methods from VB6 via COM visible DLL



I have created a .NET DLL which makes some methods COM visible.

One method is problematic. It looks like this:

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

VB6 gives a compile error when I attempt to call the method:

Function or interface marked as restricted, or the function uses an Automation type not supported in Visual Basic.

I read that array parameters must be passed by reference, so I altered the first parameter in the signature:

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

VB6 still gives the same compile error.

How might I alter the signature to be compatible with VB6?




C#: Cleanest way to divide a string array into N instances N items long

1:



How can I remove the first element of an array in Objective C?
Declaring the array argument with "ref" is required.


How can I display an array in a human readable format?
Your 2nd attempt should have worked just fine, perhaps you forgot to regenerate the .tlb?.
Compare elements in an array for duplicates
Tested code:.
sum arrays
[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) 


Comparing a string to an array in objective-C


Sorting an array of an array of objects in PHP by key value

2:



How to populate/instantiate a C# array with a single value?
Try.
[ComVisible(true)] bool Foo([In] ref byte[] a, [In] ref byte[] b, string c, ref string d) 


3:


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) 



88 out of 100 based on 88 user ratings 238 reviews