Hi,
I have some code in VB6 that uses a dll with a callback function
(funceval1). I want to convert this to VB.Net but I can't get it to
work. When funceval1 is called the var parameter only contains 1 value
instead of two and the value makes no sense.
I hope someone can take the time and try and help me.
This how the prototypes look in VB6.
Declare Function loadnlp Lib "frontmip.dll" (ByVal PROBNAME As String,
ByVal numcols As Long,
ByVal numrows As Long,
ByVal objsen As Long,
obj() As Double,
rhs() As Double,
sense() As Byte,
matbeg() As Long,
matcnt() As Long,
matind() As Long,
matval() As Double,
var() As Double,
lb() As Double,
ub() As Double,
rngval() As Double,
ByVal nzspace As Long,
ByVal funceval As Long,
ByVal jacobian As Long) As Long
' Callback routine def
Function funceval1(lp As Long, ByVal numcols As Integer, ByVal numrows
As Integer, ByRef objval As Double, ByRef lhs() As Double, ByRef var()
As Double, ByVal varone As Integer, ByVal vartwo As Integer) As Long
' Call to loadnlp
lp = loadnlp(PROBNAME, 2, 2, 1, obj, rhs, sense, _
NullL, NullL, NullL, matval, x, lb, ub, NullD, 4, _
AddressOf funceval1, 0)
and this is what I've done so far in Vb.net
<DllImport("frontmip.dll", CharSet:=CharSet.Ansi)> _
Public Function loadnlp(ByVal probname As String,
ByVal numcols As Integer,
ByVal numrows As Integer,
ByVal objsen As Integer,
<MarshalAs(UnmanagedType.SafeArray)> ByRef DatoObj() As Double,
<MarshalAs(UnmanagedType.SafeArray)> ByRef rhs() As Double,
<MarshalAs(UnmanagedType.SafeArray)> ByRef sense() As Byte,
<MarshalAs(UnmanagedType.SafeArray)> ByRef matbeg() As Integer,
<MarshalAs(UnmanagedType.SafeArray)> ByRef matcnt() As Integer,
<MarshalAs(UnmanagedType.SafeArray)> ByRef matind() As Integer,
<MarshalAs(UnmanagedType.SafeArray)> ByRef matval() As Double,
<MarshalAs(UnmanagedType.SafeArray)> ByRef var() As Double,
<MarshalAs(UnmanagedType.SafeArray)> ByRef lb() As Double,
<MarshalAs(UnmanagedType.SafeArray)> ByRef ub() As Double,
<MarshalAs(UnmanagedType.SafeArray)> ByRef rngval() As Double,
ByVal nzspace As Integer,
ByVal funceval1 As Defunc,
ByVal jacobian As Integer) As Integer
End Function
Public Function funceval1(ByRef lp As Integer, ByVal numcols As Short,
ByVal numrows As Short, ByRef objval As Double,
<MarshalAs(UnmanagedType.SafeArray)> ByRef lhs() As Double,
<MarshalAs(UnmanagedType.SafeArray)> ByRef var() As Double, ByVal
varone As Short, ByVal vartwo As Short) As Integer
lp = loadnlp(PROBNAME, 2, 2, 1, obj, rhs, sense, NullL, NullL, NullL,
matval, x, lb, ub, NullD, 4, AddressOf funceval1, 0)
Thanks in advance!