
Apres avoir essayé avec succes mais quand meme pendant un mois et demi, de simplifier le passage d'un tableau de string a une DLL.
KCC se lance dans une nouvelle aventure : La "simplification" des appels de fonctions strings
En effet, l'appel des fonctions, je l'utilisais au plus simple comme ça :
Code : Tout sélectionner
RetourFonction$ = Peeks(CallFunction(0, Fonction, Parametre1,Parametre2))

Fort de cette remarque, parce que KCC, il cause beaucoup certes, mais il ecoute aussi

J'me suis dit, vu que tu apelles toute les trois lignes ta super DLL, ne serait il pas bon de faire une fonction d'appel simplifié, qui comprendrait la sécurité et tout le toutim

J'avais deja fait un POST de ce genre, mais ça n'avait pas été concluant.
Alors je relance le sujet, car il serait bien de pouvoir faire un appel protégé en une ligne de fonctions.
Et vu que mon FRED d'amour, il m'a pas envoyé de carte d'invitation pour changer les appels de fonctions, et que maintenant il dit que il faut utiliser les PROTOTRUCS, une fonction que j'y comprend rien, ou presque.
Je me suis dit que si je mettais les PROTOTRUCS dans une jolie procedure, et bien j'aurais pas a me casse la tete a essayer de les comprendre, puique je les verrait plus

Alors ce matin, la tete in the "ionfe", j'ai codé ça.
Mais evidemment les callfunction que j'aime y marchent...et les PROTOZOIDES qui savent que je les aiment pas.......et ben y marchent pas

Alors si quinquin, a une meilleur idée, pour creer ce genre d'appel...ou si on peut me dire ou est le "Miasme"...et bien ce serait drolement gentil

J'ai choisi le passage de parametres par les strings et des separateurs, car j'ai pas trouvé mieux pour passer des chiffres et des lettres et ceci sans limite de nombre.
En effet, l'avantage par cette methode c'est que l'on met autant de parametres que l'on veut en les separant d'une barre

La je me suis arretté à 5, mais on peut faire plus evidemment

Code de l'exe
Code : Tout sélectionner
Prototype.l Generic(Texte1.s = "", Texte2.s = "", Texte3.s = "", Texte4.s = "", Texte5.s = "")
Procedure.s CallFunctionString(IdDll, Fonction.s, Parametres.s = "")
Protected RetourFonction.l
If Trim(Parametres) = ""
RetourFonction = CallFunction(IdDll, Fonction, @"")
Else
Select CountString(Parametres, "|")
Case 0
RetourFonction = CallFunction(IdDll, Fonction, @Parametres)
Case 1
Para1.s = StringField(Parametres, 1, "|")
Para2.s = StringField(Parametres, 2, "|")
RetourFonction = CallFunction(IdDll, Fonction, @Para1, @Para2)
Case 2
Para1.s = StringField(Parametres, 1, "|")
Para2.s = StringField(Parametres, 2, "|")
Para3.s = StringField(Parametres, 3, "|")
RetourFonction = CallFunction(IdDll, Fonction, @Para1, @Para2, @Para3)
Case 3
Para1.s = StringField(Parametres, 1, "|")
Para2.s = StringField(Parametres, 2, "|")
Para3.s = StringField(Parametres, 3, "|")
Para4.s = StringField(Parametres, 4, "|")
RetourFonction = CallFunction(IdDll, Fonction, @Para1, @Para2, @Para3, @Para4)
Case 4
Para1.s = StringField(Parametres, 1, "|")
Para2.s = StringField(Parametres, 2, "|")
Para3.s = StringField(Parametres, 3, "|")
Para4.s = StringField(Parametres, 4, "|")
Para5.s = StringField(Parametres, 5, "|")
RetourFonction = CallFunction(IdDll, Fonction, @Para1, @Para2, @Para3, @Para4, @Para5)
EndSelect
EndIf
If RetourFonction
ProcedureReturn PeekS(RetourFonction)
EndIf
EndProcedure
Procedure.s CallProtoString(IdDll, Fonction.s, Parametres.s = "")
Protected RetourFonction.l
If Trim(Parametres) = ""
Proto.Generic = GetFunction(0, Fonction)
RetourFonction = Proto("")
Else
Select CountString(Parametres, "|")
Case 0
Proto.Generic = GetFunction(0, Fonction)
RetourFonction = Proto(Parametres)
Case 1
Para1.s = StringField(Parametres, 1, "|")
Para2.s = StringField(Parametres, 2, "|")
Proto.Generic = GetFunction(0, Fonction)
RetourFonction = Proto(Para1, Para2)
Case 2
Para1.s = StringField(Parametres, 1, "|")
Para2.s = StringField(Parametres, 2, "|")
Para3.s = StringField(Parametres, 3, "|")
Proto.Generic = GetFunction(0, Fonction)
RetourFonction = Proto(Para1, Para2, Para3)
Case 3
Para1.s = StringField(Parametres, 1, "|")
Para2.s = StringField(Parametres, 2, "|")
Para3.s = StringField(Parametres, 3, "|")
Para4.s = StringField(Parametres, 4, "|")
Proto.Generic = GetFunction(0, Fonction)
RetourFonction = Proto(Para1, Para2, Para3, Para4)
Case 4
Para1.s = StringField(Parametres, 1, "|")
Para2.s = StringField(Parametres, 2, "|")
Para3.s = StringField(Parametres, 3, "|")
Para4.s = StringField(Parametres, 4, "|")
Para5.s = StringField(Parametres, 5, "|")
Proto.Generic = GetFunction(0, Fonction)
RetourFonction = Proto(Para1, Para2, Para3, Para4, Para5)
Default
ProcedureReturn
EndSelect
If RetourFonction
ProcedureReturn PeekS(RetourFonction)
EndIf
EndIf
EndProcedure
OpenLibrary(0, "DllMessageBox.dll")
Debug CallProtoString(0, "MessageBox1")
Debug CallProtoString(0, "MessageBox1", "Hello 1")
Debug CallProtoString(0, "MessageBox2", "Hello 1|2")
Debug CallProtoString(0, "MessageBox2", "Hello 1|2|3")
Debug CallProtoString(0, "MessageBox2", "Hello 1|2|3|4")
Debug CallProtoString(0, "MessageBox2", "Hello 1|2|3|4|5")
Debug CallFunctionString(0, "MessageBox1")
Debug CallFunctionString(0, "MessageBox1", "Hello 1")
Debug CallFunctionString(0, "MessageBox2", "Hello 1|2")
Debug CallFunctionString(0, "MessageBox3", "Hello 1|2|3")
Debug CallFunctionString(0, "MessageBox4", "Hello 1|2|3|4")
Debug CallFunctionString(0, "MessageBox5", "Hello 1|2|3|4|5")
CloseLibrary(0)
Code : Tout sélectionner
ProcedureDLL.s MessageBox1(Texte.s)
MessageRequester("Message de la Dll 1", Texte)
ProcedureReturn Texte
EndProcedure
ProcedureDLL.s MessageBox2(Texte1.s, Texte2.s)
Texte$ = Texte1 + " " + Texte2
MessageRequester("Message de la Dll 2", Texte$)
ProcedureReturn Texte$
EndProcedure
ProcedureDLL.s MessageBox3(Texte1.s, Texte2.s, Texte3.s)
Texte$ = Texte1 + " " + Texte2 + " " + Texte3
MessageRequester("Message de la Dll 3", Texte$)
ProcedureReturn Texte$
EndProcedure
ProcedureDLL.s MessageBox4(Texte1.s, Texte2.s, Texte3.s, Texte4.s)
Texte$ = Texte1 + " " + Texte2 + " " + Texte3 + " " + Texte4
MessageRequester("Message de la Dll 4", Texte$)
ProcedureReturn Texte$
EndProcedure
ProcedureDLL.s MessageBox5(Texte1.s, Texte2.s, Texte3.s, Texte4.s, Texte5.s)
Texte$ = Texte1 + " " + Texte2 + " " + Texte3 + " " + Texte4 + " " + Texte5
MessageRequester("Message de la Dll 5", Texte$)
ProcedureReturn Texte$
EndProcedure