
Since several version FRED don't want we use callfunction, and say we must use PROTOTYPE

So PROTOTYPE is not really easy for use, and a little bit more long for write..at my advice :roll:
CALLFUNCTION was so simple for "hight level programmer" like me.

Then.... listen that his bravery....KCC take his keyboard, and try to extend the life of his love CALLFUNCTION

Kcc_CallFunction ==> For replace the old call, with use prototype (FRED perhaps happy :roll:)
Perhaps also FRED laugh a little bit, because i'm forced me too, for the moment, to send the String with her pointer "@String"


But pom-pom on the brownie....KCC create three other functions, for make again more simple, the call of function.
He have anticipate ten parameters, i think it's enough :roll:
Kcc_CallFunctionString ==> For manage and return directly String
Kcc_CallFunctionArrayString ==> For manage and return directly Array of string
Kcc_CallFunctionArray ==> For manage and return directly Array
Obviously...i go to learn to you something....Kcc don't works alone...

He have an angel, with big wings, above his cradle

And like nobody know him....i have the honor to say his name.... It's MASTER SROD....

But i want to thanks also, MASTER NETMAESTRO who help me so much in this code

I caution you, this code is writing with the feet....furthermore KCC feets

And surelly have one thowsand of bugs, and memory leaks, and other things, that i don't know the being.....you are surelly not surprising

If you want say to me the list..KCC have cut all his tree of his garden, to can writing it

I want just present to you an idea...


And i hope, that someone, perhaps want to help me for ameliorate it, or again better, use my idea and write better code without junk :roll:
Or perhaps it's possible to mix several function for have again less of "KCC_CALFUNCTIONS"

Or at the minimum give his advice, or even a little slap behind KCC head, like leroy jethro gibbs, not too strong, because i have a headache after that

Attention !!! Not works in 4.50 (Bugs STATIC fixed in v4.51)
So like say my MASTER..enough talking.....this is the second tips of KCC.......
TaaaaaaaTaaaaaaaa !!!!!
The Exe
Code: Select all
#ERC_ArrayPB = 1
#ERC_ArrayVB = 2
Prototype Send0ParS(*address.STRING, Chars)
Prototype Send1ParS(*address.STRING, Chars, Par1)
Prototype Send2ParS(*address.STRING, Chars, Par1, Par2)
Prototype Send3ParS(*address.STRING, Chars, Par1, Par2, Par3)
Prototype Send4ParS(*address.STRING, Chars, Par1, Par2, Par3, Par4)
Prototype Send5ParS(*address.STRING, Chars, Par1, Par2, Par3, Par4, Par5)
Prototype Send6ParS(*address.STRING, Chars, Par1, Par2, Par3, Par4, Par5, Par6)
Prototype Send7ParS(*address.STRING, Chars, Par1, Par2, Par3, Par4, Par5, Par6, Par7)
Prototype Send8ParS(*address.STRING, Chars, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8)
Prototype Send9ParS(*address.STRING, Chars, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9)
Prototype Send10ParS(*address.STRING, Chars, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9, Par10)
Prototype Send0Par(*address.STRING)
Prototype Send1Par(*address.STRING, Par1)
Prototype Send2Par(*address.STRING, Par1, Par2)
Prototype Send3Par(*address.STRING, Par1, Par2, Par3)
Prototype Send4Par(*address.STRING, Par1, Par2, Par3, Par4)
Prototype Send5Par(*address.STRING, Par1, Par2, Par3, Par4, Par5)
Prototype Send6Par(*address.STRING, Par1, Par2, Par3, Par4, Par5, Par6)
Prototype Send7Par(*address.STRING, Par1, Par2, Par3, Par4, Par5, Par6, Par7)
Prototype Send8Par(*address.STRING, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8)
Prototype Send9Par(*address.STRING, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9)
Prototype Send10Par(*address.STRING, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9, Par10)
If Not OpenLibrary(0, "stringfunctions.dll")
Debug "No dll..."
End
EndIf
Procedure.s Kcc_CallFunctionString(NameOfFunction.s, Par1 = 0, Par2 = 0, Par3 = 0, Par4 = 0, Par5 = 0, Par6 = 0, Par7 = 0, Par8 = 0, Par9 = 0, Par10 = 0)
Define Result.s = "Error"
If Par10
Function.Send10ParS = GetFunction(0, NameOfFunction)
If Function.Send10ParS
Length = Function(@Result, 0, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9, Par10)
Result = Space(Length)
Function(@Result, Length, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9, Par10)
EndIf
ElseIf Par9
Function.Send9ParS = GetFunction(0, NameOfFunction)
If Function.Send9ParS
Length = Function(@Result, 0, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9)
Result = Space(Length)
Function(@Result, Length, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9)
EndIf
ElseIf Par8
Function.Send8ParS = GetFunction(0, NameOfFunction)
If Function.Send8ParS
Length = Function(@Result, 0, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8)
Result = Space(Length)
Function(@Result, Length, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8)
EndIf
ElseIf Par7
Function.Send7ParS = GetFunction(0, NameOfFunction)
If Function.Send7ParS
Length = Function(@Result, 0, Par1, Par2, Par3, Par4, Par5, Par6, Par7)
Result = Space(Length)
Function(@Result, Length, Par1, Par2, Par3, Par4, Par5, Par6, Par7)
EndIf
ElseIf Par6
Function.Send6ParS = GetFunction(0, NameOfFunction)
If Function.Send6ParS
Length = Function(@Result, 0, Par1, Par2, Par3, Par4, Par5, Par6)
Result = Space(Length)
Function(@Result, Length, Par1, Par2, Par3, Par4, Par5, Par6)
EndIf
ElseIf Par5
Function.Send5ParS = GetFunction(0, NameOfFunction)
If Function.Send5ParS
Length = Function(@Result, 0, Par1, Par2, Par3, Par4, Par5)
Result = Space(Length)
Function(@Result, Length, Par1, Par2, Par3, Par4, Par5)
EndIf
ElseIf Par4
Function.Send4ParS = GetFunction(0, NameOfFunction)
If Function.Send4ParS
Length = Function(@Result, 0, Par1, Par2, Par3, Par4)
Result = Space(Length)
Function(@Result, Length, Par1, Par2, Par3, Par4)
EndIf
ElseIf Par3
Function.Send3ParS = GetFunction(0, NameOfFunction)
If Function.Send3ParS
Length = Function(@Result, 0, Par1, Par2, Par3)
Result = Space(Length)
Function(@Result, Length, Par1, Par2, Par3)
EndIf
ElseIf Par2
Function.Send2ParS = GetFunction(0, NameOfFunction)
If Function.Send2ParS
Length = Function(@Result, 0, Par1, Par2)
Result = Space(Length)
Function(@Result, Length, Par1, Par2)
EndIf
ElseIf Par1
Function.Send1ParS = GetFunction(0, NameOfFunction)
If Function.Send1ParS
Length = Function(@Result, 0, Par1)
Result = Space(Length)
Function(@Result, Length, Par1)
EndIf
Else
Function.Send0ParS = GetFunction(0, NameOfFunction)
If Function.Send0ParS
Length = Function(@Result, 0)
Result = Space(Length)
Length = Function(@Result, Length)
EndIf
EndIf
If Result = "Error"
MessageRequester("ArrayFromDll", "The function ''" + NameOfFunction + "'' don't answer.")
EndIf
ProcedureReturn Result
EndProcedure
Procedure Kcc_CallFunction(NameOfFunction.s, Par1 = 0, Par2 = 0, Par3 = 0, Par4 = 0, Par5 = 0, Par6 = 0, Par7 = 0, Par8 = 0, Par9 = 0, Par10 = 0)
Define Result.l = -1
If Par10
Function.Send10Par = GetFunction(0, NameOfFunction)
If Function.Send10Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9, Par10)
EndIf
ElseIf Par9
Function.Send9Par = GetFunction(0, NameOfFunction)
If Function.Send9Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9)
EndIf
ElseIf Par8
Function.Send8Par = GetFunction(0, NameOfFunction)
If Function.Send8Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8)
EndIf
ElseIf Par7
Function.Send7Par = GetFunction(0, NameOfFunction)
If Function.Send7Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6, Par7)
EndIf
ElseIf Par6
Function.Send6Par = GetFunction(0, NameOfFunction)
If Function.Send6Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6)
EndIf
ElseIf Par5
Function.Send5Par = GetFunction(0, NameOfFunction)
If Function.Send5Par
Function(@Result, Par1, Par2, Par3, Par4, Par5)
EndIf
ElseIf Par4
Function.Send4Par = GetFunction(0, NameOfFunction)
If Function.Send4Par
Function(@Result, Par1, Par2, Par3, Par4)
EndIf
ElseIf Par3
Function.Send3Par = GetFunction(0, NameOfFunction)
If Function.Send3Par
Function(@Result, Par1, Par2, Par3)
EndIf
ElseIf Par2
Function.Send2Par = GetFunction(0, NameOfFunction)
If Function.Send2Par
Function(@Result, Par1, Par2)
EndIf
ElseIf Par1
Function.Send1Par = GetFunction(0, NameOfFunction)
If Function.Send1Par
Function(@Result, Par1)
EndIf
Else
Function.Send0Par = GetFunction(0, NameOfFunction)
If Function.Send0Par
Function(@Result)
EndIf
EndIf
If Result = - 1
MessageRequester("ArrayFromDll", "The function ''" + NameOfFunction + "'' don't answer.")
EndIf
ProcedureReturn Result
EndProcedure
Procedure Kcc_CallFunctionArrayString(NameOfFunction.s, Array TabloARemplir.s(1), Par1 = 0, Par2 = 0, Par3 = 0, Par4 = 0, Par5 = 0, Par6 = 0, Par7 = 0, Par8 = 0, Par9 = 0, Par10 = 0)
Define Result.l = -1
Define *strPtr.INTEGER
If Par10
Function.Send10Par = GetFunction(0, NameOfFunction)
If Function.Send10Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9, Par10)
EndIf
ElseIf Par9
Function.Send9Par = GetFunction(0, NameOfFunction)
If Function.Send9Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9)
EndIf
ElseIf Par8
Function.Send8Par = GetFunction(0, NameOfFunction)
If Function.Send8Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8)
EndIf
ElseIf Par7
Function.Send7Par = GetFunction(0, NameOfFunction)
If Function.Send7Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6, Par7)
EndIf
ElseIf Par6
Function.Send6Par = GetFunction(0, NameOfFunction)
If Function.Send6Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6)
EndIf
ElseIf Par5
Function.Send5Par = GetFunction(0, NameOfFunction)
If Function.Send5Par
Function(@Result, Par1, Par2, Par3, Par4, Par5)
EndIf
ElseIf Par4
Function.Send4Par = GetFunction(0, NameOfFunction)
If Function.Send4Par
Function(@Result, Par1, Par2, Par3, Par4)
EndIf
ElseIf Par3
Function.Send3Par = GetFunction(0, NameOfFunction)
If Function.Send3Par
Function(@Result, Par1, Par2, Par3)
EndIf
ElseIf Par2
Function.Send2Par = GetFunction(0, NameOfFunction)
If Function.Send2Par
Function(@Result, Par1, Par2)
EndIf
ElseIf Par1
Function.Send1Par = GetFunction(0, NameOfFunction)
If Function.Send1Par
Function(@Result, Par1)
EndIf
Else
Function.Send0Par = GetFunction(0, NameOfFunction)
If Function.Send0Par
Function(@Result)
EndIf
EndIf
If Result = - 1
MessageRequester("ArrayFromDll", "The function ''" + NameOfFunction + "'' don't answer.")
EndIf
*strPtr.INTEGER = Result
If *strPtr
If *strPtr\i
LigneZero$ = PeekS(*strPtr\i, -1, #PB_Unicode)
If Left(Trim(LigneZero$), 1) = "?"
LigneZero$ = PeekS(*strPtr\i, -1, #PB_Ascii)
EndIf
If Trim(LigneZero$) = ""
MessageRequester("TabloDllEnLocal", "La ligne zéro du tableau est vide.")
ProcedureReturn #False
EndIf
TailleTabloDLL = Val(LigneZero$)
If TailleTabloDLL = #False
ProcedureReturn #False
ElseIf TailleTabloDLL < 0
TailleTabloDLL = TailleTabloDLL * (-1)
TypeArray = #ERC_ArrayVB
ElseIf TailleTabloDLL > 0
TypeArray = #ERC_ArrayPB
EndIf
TailleTotale = TailleTabloDLL
If ArraySize(TabloARemplir())
TailleTabloModifier = ArraySize(TabloARemplir())
TailleTotale + TailleTabloModifier
EndIf
ReDim TabloARemplir.s(TailleTotale)
TabloARemplir(0) = Str(TailleTotale)
For i = TailleTabloModifier + 1 To TailleTotale
*strPtr + SizeOf(INTEGER)
If *strPtr\i <> 0
Select TypeArray
Case #ERC_ArrayVB
TabloARemplir(i) = PeekS(*strPtr\i, -1, #PB_Unicode)
Case #ERC_ArrayPB
TabloARemplir(i) = PeekS(*strPtr\i, -1, #PB_Ascii)
EndSelect
Else
TabloARemplir(i) = ""
EndIf
Next
ProcedureReturn TailleTotale
Else
MessageRequester("TabloDllEnLocal", "La valeur de la variable structurée est de zéro (La ligne zéro du tableau est peut etre vide)")
ProcedureReturn #False
EndIf
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure Kcc_CallFunctionArray(NameOfFunction.s, Array TabloARemplir(1), Par1 = 0, Par2 = 0, Par3 = 0, Par4 = 0, Par5 = 0, Par6 = 0, Par7 = 0, Par8 = 0, Par9 = 0, Par10 = 0)
Define Result.l = -1
Define *strPtr.INTEGER
If Par10
Function.Send10Par = GetFunction(0, NameOfFunction)
If Function.Send10Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9, Par10)
EndIf
ElseIf Par9
Function.Send9Par = GetFunction(0, NameOfFunction)
If Function.Send9Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9)
EndIf
ElseIf Par8
Function.Send8Par = GetFunction(0, NameOfFunction)
If Function.Send8Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8)
EndIf
ElseIf Par7
Function.Send7Par = GetFunction(0, NameOfFunction)
If Function.Send7Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6, Par7)
EndIf
ElseIf Par6
Function.Send6Par = GetFunction(0, NameOfFunction)
If Function.Send6Par
Function(@Result, Par1, Par2, Par3, Par4, Par5, Par6)
EndIf
ElseIf Par5
Function.Send5Par = GetFunction(0, NameOfFunction)
If Function.Send5Par
Function(@Result, Par1, Par2, Par3, Par4, Par5)
EndIf
ElseIf Par4
Function.Send4Par = GetFunction(0, NameOfFunction)
If Function.Send4Par
Function(@Result, Par1, Par2, Par3, Par4)
EndIf
ElseIf Par3
Function.Send3Par = GetFunction(0, NameOfFunction)
If Function.Send3Par
Function(@Result, Par1, Par2, Par3)
EndIf
ElseIf Par2
Function.Send2Par = GetFunction(0, NameOfFunction)
If Function.Send2Par
Function(@Result, Par1, Par2)
EndIf
ElseIf Par1
Function.Send1Par = GetFunction(0, NameOfFunction)
If Function.Send1Par
Function(@Result, Par1)
EndIf
Else
Function.Send0Par = GetFunction(0, NameOfFunction)
If Function.Send0Par
Function(@Result)
EndIf
EndIf
If Result = - 1
MessageRequester("ArrayFromDll", "The function ''" + NameOfFunction + "'' don't answer.")
EndIf
*strPtr.INTEGER = Result
If *strPtr
If *strPtr\i
SizeArray = PeekL(*strPtr)
If SizeArray = 0
MessageRequester("TabloParPointeur", "La ligne zéro du tableau est vide.")
ProcedureReturn #False
EndIf
Dim TabloARemplir(SizeArray)
CopyMemory(*strPtr, @TabloARemplir(), (SizeArray + 1) * SizeOf(INTEGER))
Else
MessageRequester("TabloDllEnLocal", "La valeur de la variable structurée est de zéro (La ligne zéro du tableau est peut etre vide)")
ProcedureReturn #False
EndIf
Else
ProcedureReturn #False
EndIf
EndProcedure
; Function for numeric
Debug Kcc_CallFunction("AddNumbe", 1, 2, 3) ; Create an error, for a time anticipate :-)))
Debug "Function ''ADDNUMBER'' For adding numbers"
Debug Kcc_CallFunction("AddNumber", 1, 2, 3)
Debug ""
; Function for strings with parameter
Debug "Function ''ADDSTRING'' for strings with parameter"
A$ = "Kcc "
B$ = "Reinvent "
C$ = "the wheel"
Debug Kcc_CallFunctionString("AddString", @A$, @B$, @C$)
Debug ""
Debug "Function ''UCASESTRING'' for strings with parameter"
Debug Kcc_CallFunctionString("UcaseString", @"Kcc is the most happy little programmer at the word")
Debug ""
; Function for strings without parameter
Debug "Function ''APPPATH'' For strings without parameter"
Debug Kcc_CallFunctionString("AppPath")
Debug ""
;Function For Return StringArray with no sending array
Debug "Function ''FILLEDARRAY'' For Return StringArray with no sending array"
Dim NewArray1.s(0)
Kcc_CallFunctionArrayString("FilledArray", NewArray1())
For i = 0 To ArraySize(NewArray1())
Debug NewArray1(i)
Next
Debug ""
;Function For Return Array with sending array
Debug "Function ''COMPLEMENT ARRAY'' For Return Array with sending array"
Dim ArrayExe(5)
ArrayExe(0) = ArraySize(ArrayExe())
ArrayExe(1) = 1
ArrayExe(2) = 2
ArrayExe(3) = 3
ArrayExe(4) = 4
ArrayExe(5) = 5
Dim NewArray2(0)
Kcc_CallFunctionArray("ComplementArray", NewArray2(), @ArrayExe())
For i = 0 To ArraySize(NewArray2())
Debug NewArray2(i)
Next
Debug ""
;Function For Return StringArray with sending array
Debug "Function ''UCASEARRAY'' For Return StringArray with sending array"
Dim ArrayExeString.s(5)
ArrayExeString(0) = Str(ArraySize(ArrayExeString()))
ArrayExeString(1) = "I'm a line 1 from array EXE"
ArrayExeString(2) = "I'm a line 2 from array EXE"
ArrayExeString(3) = "I'm a line 3 from array EXE"
ArrayExeString(4) = "I'm a line 4 from array EXE"
ArrayExeString(5) = "I'm a line 5 from array EXE"
Dim NewArrayString.s(0)
Kcc_CallFunctionArrayString("UcaseArray", NewArrayString(), @ArrayExeString())
For i = 0 To ArraySize(NewArrayString())
Debug NewArrayString(i)
Next
Code: Select all
#ERC_ArrayPB = 1
#ERC_ArrayVB = 2
Procedure TabloStringParPointeur(*strPtr.INTEGER, Array TabloARemplir.s(1)) ; Recupere un tableau de string provenant d'une procedure LOCALE ou DLL
If *strPtr
If *strPtr\i
LigneZero$ = PeekS(*strPtr\i, -1, #PB_Unicode)
If Left(Trim(LigneZero$), 1) = "?"
LigneZero$ = PeekS(*strPtr\i, -1, #PB_Ascii)
EndIf
If Trim(LigneZero$) = ""
MessageRequester("TabloDllEnLocal", "La ligne zéro du tableau est vide.")
ProcedureReturn #False
EndIf
TailleTabloDLL = Val(LigneZero$)
If TailleTabloDLL = #False
ProcedureReturn #False
ElseIf TailleTabloDLL < 0
TailleTabloDLL = TailleTabloDLL * (-1)
TypeArray = #ERC_ArrayVB
ElseIf TailleTabloDLL > 0
TypeArray = #ERC_ArrayPB
EndIf
TailleTotale = TailleTabloDLL
If ArraySize(TabloARemplir())
TailleTabloModifier = ArraySize(TabloARemplir())
TailleTotale + TailleTabloModifier
EndIf
ReDim TabloARemplir.s(TailleTotale)
TabloARemplir(0) = Str(TailleTotale)
For i = TailleTabloModifier + 1 To TailleTotale
*strPtr + SizeOf(INTEGER)
If *strPtr\i <> 0
Select TypeArray
Case #ERC_ArrayVB
TabloARemplir(i) = PeekS(*strPtr\i, -1, #PB_Unicode)
Case #ERC_ArrayPB
TabloARemplir(i) = PeekS(*strPtr\i, -1, #PB_Ascii)
EndSelect
Else
TabloARemplir(i) = ""
EndIf
Next
ProcedureReturn TailleTotale
Else
MessageRequester("TabloDllEnLocal", "La valeur de la variable structurée est de zéro (La ligne zéro du tableau est peut etre vide)")
ProcedureReturn #False
EndIf
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure TabloParPointeur(*strPtr.INTEGER, Array TabloARemplir(1)) ; Recupere un tableau integer provenant d'une procedure LOCALE ou DLL
If *strPtr
If *strPtr\i
SizeArray = PeekL(*strPtr)
If SizeArray = 0
MessageRequester("TabloParPointeur", "La ligne zéro du tableau est vide.")
ProcedureReturn #False
EndIf
Dim TabloARemplir(SizeArray)
CopyMemory(*strPtr, @TabloARemplir(), (SizeArray + 1) * SizeOf(INTEGER))
Else
MessageRequester("TabloDllEnLocal", "La valeur de la variable structurée est de zéro (La ligne zéro du tableau est peut etre vide)")
ProcedureReturn #False
EndIf
Else
ProcedureReturn #False
EndIf
EndProcedure
ProcedureDLL AppPath(*address, chars)
Value$ = Space(500)
GetCurrentDirectory_(500, @Value$)
Value$ = Trim(Value$)
PathAddBackslash_(@Value$)
If chars
If Len(Value$) < chars
PokeS(*address, Value$)
ProcedureReturn 0
Else
PokeS(*address, Left(Value$, chars - 1))
ProcedureReturn Len(Value$) + 1
EndIf
Else
ProcedureReturn Len(Value$) + 1
EndIf
EndProcedure
ProcedureDLL UcaseString(*address, chars, *A)
If *A
Value$ = UCase(PeekS(*A))
EndIf
If chars
If Len(Value$) < chars
PokeS(*address, Value$)
ProcedureReturn 0
Else
PokeS(*address, Left(Value$, chars - 1))
ProcedureReturn Len(Value$) + 1
EndIf
Else
ProcedureReturn Len(Value$) + 1
EndIf
EndProcedure
ProcedureDLL AddString(*address, chars, *A, *B, *C)
Value$ + PeekS(*A) + PeekS(*B) + PeekS(*C)
If chars
If Len(Value$) < chars
PokeS(*address, Value$)
ProcedureReturn 0
Else
PokeS(*address, Left(Value$, chars - 1))
ProcedureReturn Len(Value$) + 1
EndIf
Else
ProcedureReturn Len(Value$) + 1
EndIf
EndProcedure
ProcedureDLL AddNumber(*address, P1, P2, P3)
Define Value.l
Value + P1 + P2 + P3
PokeL(*address, Value)
EndProcedure
ProcedureDLL FilledArray(*address)
Static Dim Temp_Array.s(10) ; Because i don't want a global
For i = 0 To ArraySize(Temp_Array())
Temp_Array(i) = "Hello i'm the line " + Str(i) + " of an Array filled by the DLL"
Next
Temp_Array(0) = Str(ArraySize(Temp_Array()))
PokeL(*address, @Temp_Array())
EndProcedure
ProcedureDLL UcaseArray(*AdresseReturn, *AddressArray)
Dim ArrayExe.s(0)
TabloStringParPointeur(*AddressArray, ArrayExe())
SizeTempArrayExe = ArraySize(ArrayExe())
Static Dim Temp_Array.s(0) ; Because i don't want a global
ReDim Temp_Array.s(SizeTempArrayExe)
For i = 1 To SizeTempArrayExe
Temp_Array(i) = UCase(ArrayExe(i))
Next
Temp_Array(0) = Str(SizeTempArrayExe)
PokeL(*AdresseReturn, @Temp_Array())
EndProcedure
ProcedureDLL ComplementArray(*AdresseReturn, *AddressArray)
Static Dim ArrayExe(0)
TabloParPointeur(*AddressArray, ArrayExe())
For i = 1 To ArraySize(ArrayExe())
ArrayExe(i) = 10 - ArrayExe(i)
Next
ArrayExe(0) = ArraySize(ArrayExe())
PokeL(*AdresseReturn, @ArrayExe())
EndProcedure

Thank you for reading
