Ambiguous because multiple kinds of members with this name exist in interface

233 Views Asked by At

this is the Interface:

Namespace IBasBS100
    Public Interface IBasBSMoedas <DispId(0)> <Obsolete("This method is obsolete. Use Actualiza(BasBE100.BasBEMoeda objMoeda, ref string strAvisos) instead.", False)>
        Sub Actualiza(objMoeda As BasBEMoeda, Optional strAvisos As String = "")
        <DispId(18)>
        Sub Actualiza(objMoeda As BasBEMoeda, ByRef strAvisos As String)
        <DispId(2)>
        

when i try to call the function that is not depracated it gives me the ambiguous error message:

   Dim avisos As String
   Dim bsmoedas As IBasBSMoedas = MotorPRI.Base.Moedas
   bsmoedas.Actualiza(m, avisos)

I think its calling the depracated method. Is there any way that i could explicitly call the non depracated method "Actualiza(objMoeda As BasBEMoeda, ByRef strAvisos As String)"?

PS: I can not change the interface, it's an external Library

2

There are 2 best solutions below

4
On

I can only assume that the interface code was written in C# because that VB code won't compile. In VB, you don't explicitly state when passing an argument by reference, so the there's no way to differentiate between those two methods when calling one in VB code. In C#, you specify the ref or out keyword when passing an argument by reference, so there is no ambiguity in which overload you are calling, so it's allowed.

In short, you cannot call that interface method in VB. You can implement the interface in a class in VB and use a different name for one of the methods but you'd still have to call it through the class, not the interface. If you want to be able to use that interface then you're going to have to do it in C# code. Perhaps write a library in C# for the code that uses that interface and then consume that in your VB app.

I guess the other alternative to do it in VB would be to do so via Reflection. Far from ideal but I don't see another way.

0
On

Primavera v10 funtions and VisualBasic aren't compatible with each other. Some may work, most won't. I would recommend changing to C# since this is the "supported" language of primavera.