' DLL parameter test program
' Copyright (c) 1992, by Desaware
' All rights reserved
'
'
' This program is used to test the dllparam.dll dynamic
' link library.

' Passing singles by value and returning singles
Sub TestSingleByval_Click ()
    f! = ReceivesSingle(1.59)
End Sub

' Passing longs by value and returning longs
Sub TestLongByval_Click ()
    y& = ReceivesLong(6)
End Sub

' Passing doubles by value and returning doubles
Sub TestDoubleByval_Click ()
    d# = ReceivesDouble(3.145)
End Sub

' Passing integers by reference
Sub TestIntByref_Click ()
    x% = 5
    Add5ToInteger x%
    MsgBox Str$(x%), 0, "Add5ToInteger"
End Sub

' Passing longs by reference
Sub TestLongByref_Click ()
    y& = 6
    Add5ToLong y&
    MsgBox Str$(y&), 0, "Add5ToLong"

End Sub

' Passing singles by reference
Sub TestSingleByref_Click ()
    f! = 1.59
    Add5ToSingle f!
    MsgBox Str$(f!), 0, "Add5ToSingle"

End Sub

' Passing doubles by reference
Sub TestDoubleByref_Click ()
    d# = 3.145
    Add5ToDouble d#
    MsgBox Str$(d#), 0, "Add5ToDouble"

End Sub

' Passing strings (null terminated)
' Always by reference
Sub TestString_Click ()
    ReceivesString "Hello"
End Sub

' Passing and modifying strings (null terminated)
' Always by reference
Sub TestStringChange_Click ()
    ' Null terminated string is passed to the routine
    ' x$ must be preinitialized to the maximum length.
    ' The DLL may change the contents of the string, but
    ' must never go past the null terminator
    x$ = "Hello"
    ChangesString x$
    MsgBox x$, 0, "ChangesString"
End Sub

' Passing controls and forms as parameters
Sub TestControl_Click ()
    hctl% = GetControlHwnd(TestControl)
    hfrm% = GetFormHwnd(dllparam)
    MsgBox "This control hwnd is " + Str$(hctl%) + ", the form hwnd is " + Str$(hfrm%), 0, "Get Hwnds"
End Sub

' Passing Visual Basic strings
Sub TestVBString_Click ()
    ReceivesVBString "String to DLL"
End Sub

' Passing and modifying Visual Basic strings
' Note - no length restrictions apply
Sub TestVBStringChange_Click ()
    a$ = "Short"
    ChangesVBString a$
    MsgBox a$, 0, "ChangesVBString"
End Sub

' A DLL function returning a Visual Basic String
Sub ReturnVBString_Click ()
    a$ = ReturnsVBString()
    MsgBox a$, 0, "ReturnsVBString"
End Sub

' Passing user defined types
' Always by reference
Sub TestUserType_Click ()
    Dim u As usertype
    u.a = 1
    u.b = 2
    u.c = 3
    u.d = 4
    ' Note - this is call by reference, the DLL can change
    ' the value of u
    ReceivesUserType u
End Sub

' Passing currency by value and returning currency
Sub TestCurrencyByval_Click ()
    Dim c@
    c = 1.2345
    c = ReceivesCurrency(c)
End Sub

' Passing currency by reference
Sub TestCurrencyByref_Click ()
    Dim c@
    c@ = 1.23
    AddPennyToCurrency c@
    MsgBox Str$(c@), 0, "AddPennyToCurrency"
End Sub

' Passing integers by value and returning integers
Sub TestIntByval_Click ()
    x% = ReceivesInteger(5)
End Sub

' This is a test of passing a pointer to a numeric array
' Note the unique DLL call
'
Sub ReceivesIntArray_Click ()
    ReDim x(4) As Integer
    x(0) = 1
    x(1) = 3
    x(2) = 9
    x(3) = 81
    ' Pass a pointer to the first element of the array.
    ' The DLL has no way of knowing how long the array is
    ' unless you define a length parameter for the function.
    ReceivesIntArray x(0)
End Sub

'   Show how to access strings inside user defined types
Sub TestAddUserString_Click ()
    Dim u As usertype
    ' Note - this is call by reference, the DLL can change
    ' the value of u
    u.s = "orignal string"
    AddUserString u
    MsgBox u.s, 0, "String in usertype changed"

End Sub

