Depuis longtemps que je me ronge les méninges pour trouver le moyen d'executer des fonctions/procedures externes à partir d'un EXE.
Je travaille sur un logiciel de suivi des operations. Chaque opération est basé sur des rubriques et à chaque rubrique peut correspondrent une dépense dont le mode de calcul est quelconque. Le but étant d'automatiser le processus, les rubriques sont diverses et evoluent dans le temps. Pour la plupart des logiciels le mode de calcul est codé en dur dans le programme, si pas le cas alors on sort sa calculette. Certains logiciels ont un éditeur de formule qui ne résolvra pas également tous les cas de figure. En général on arrivera à automatiser les montants calculables sous la formule Base*Taux, mais comme exemple les calculs qui font déjà allusion à la franchise, le nombre de jour, taux variable alors l'éditeur de formule n'y parviendra pas forcement.
Cette DLL en exploitant le language des scripts vous permettra de résoudre tous les cas de figures.
En effet on peut consigner les fonctions dans un fichier texte dans un language de script choisi et il suffira d'indiquer le chemin à la méthode Init de la DLL.
Mais attention, pas de soulagement, il faut bien apprendre à la DLL à reconnaitre et à passer les paramètres. J'ai mis au point une syntaxe qui permettra à la DLL d'intérroger vos fonctions.
Le fichier texte doit contenir en entête les déclarations des fonctions et variables sous la forme
DECLARE <Nom Fonction>§*<Nom Champ1>=[Valeur Par Défaut]@<Type Variable>§*<Nom Champ2>=[Valeur Par Défaut]@<Type Variable>...
<Nom Fonction> : Nom de la fonction. Si omis il s'agit d'une simple déclaration de variables
- : Facultatif, permet de dire si le paramètre de fonction est facultatif
= : Permet de définir à droite la valeur par défaut de la variable
@ : permet de définir à droite le type de la variable. Les valeurs possibles (T=Texte, N=Numerique, D=Date, B=Booléen, V=Variant)
: Séparateur de paramètres de la fonction
Exemple
-------
DECLARE §*POIDS@N*VOLUME@N*NBRECOLIS@N*NBRE20FT@N*NBRE40FT@N*FRANCHISE@N*NBREJOURS@N*TAUX=0@N
DECLARE TEUS§*NBRE20FT@N*NBRE40FT@N
La DLL comprend un certain nombre de méthodes et propriétés permettant une manipulation avec une très grande aisance.
Méthodes:
--------
Public Function AddModuleDefinition(ByVal psModuleText As String) As Boolean
Public Function ClearVariableValue(ByVal pvVariableName As Variant) As Boolean
Public Function ExecuteFunctionStatement(ByVal psFunctionName As String) As Variant
Public Function FunctionFormula(ByVal psFunctionName As String, Optional ByVal pbAskParameterValue As Boolean = True) As String
Public Function Init(Optional ByVal psFunctionsFilePath As String, Optional ByVal psVBScriptLanguage As String = "VBScript") As Boolean
Public Function IsValueMatchVariableType(ByVal pvVariableName As Variant, pvValue As Variant) As Boolean
Propriétés
----------
Public Property Get FunctionsCount() As Long
Public Property Get FunctionsNames() As Variant
Public Property Get IsVariableInitialized(ByVal pvVariableName As Variant) As Boolean
Public Property Get ParametersName(ByVal psFunctionName As String) As Variant
Public Property Get VariablesCount() As Long
Public Property Get VariablesNames(Optional ByVal psVariableType As String = vbNullString) As Variant
Public Property Let VariableValue(ByVal pvVariableName As Variant, pvVariableValue As Variant)
Public Property Get VariableValue(ByVal pvVariableName As Variant) As Variant
J'ai rajouté un projet exemple pour montrer l'exploitation de la DLL.
Source / Exemple :
REM Tout est dans la DLL, ci-dessous un exemple de bout de code montrant la recupération du résultat
Private Sub Command1_Click()
Dim vResult As Variant
vResult = clsx.ExecuteFunctionStatement([List_Fonctions])
If Not IsEmpty(vResult) Then MsgBox vResult
[Label3].Caption = clsx.FunctionFormula([List_Fonctions], False)
Call List_Parametres_Click
End Sub
Conclusion :
Cette DLL est une petite merveille, l'essayer c'est l'adopter.
J'espère avoir vos critiques et commentaires.
ASIMENGO.
je maîtrise pas tout mais peut-on avec le fichier externe ExternalFunctions.txt appeler des procédures internes au programme rattaché via du VBSCRIPT (si j'ai bien compris) et si oui comment. Si t'as un exemple, je suis preneur pour bien comprendre. Pour être clair, on peut appeler un Form1.command1_click() par exemple ?
Je te remercie par avance et je pense que je vais te mettre une bonne note quand j'aurai un peu mieux compris comment ça fonctionne. Pour un débutant comme moi, c'est quand même un peu hard mais je vais m'accrocher !
j'avais vu cette source il y a quelques temps, mais j'avais pas eu le temps de m'y plonger dedans. Si je peux me permettre, tu devrais mettre une petite application en démo (et non un évaluateur d'expression incluant par exemple le module de cryptage/décryptage) pour q'un plus grand nombre puisse en profiter. je sais un truc du style :
DECLARE TEST§*NBRE1@NŠ*NBRE2@NŠ*NBRE3@NŠ*NBRE4@N
Function TEST (NBRE1,NBRE2,NBRE3,NBRE4)
TEST=NBRE1*NBRE2*NBRE3/NBRE4
end Function
Je ne suis pas sûr que tout le monde sache se dépatouiller une DLL!!!
Pour ma part, je vais la tester (et/ou la modifier) un peu pour voir ce qu'on peut en faire. Je te tiendrai sûrement au courant.
Bonne continuation et encore bravo !
J'espère que tu pourras download ma source, elle est encore bien plus complexe, d'une grande flexibilité tu écris ton script dans le language que tu veux, et en réalité sert aussi de passerelle de mise à jour du logiciel. Elle a été concu pour être intelligente et independante.
En fait je developpe une application pour notre métier (services dans le domaine du Shipping et du Transit) qui doit gérer toutes les opérations de notre métier jusqu'à la facturation et pour toutes nos agences. Nous sommes dans plusieurs pays d'Afrique avec plusieurs langues, systèmes douaniers bien différents, des monnaies bien différentes, des comptabilités bien différentes, mais toutes les agences faisant dans notre métier. Le logiciel a été concu au départ pour une agence bien spécifique et a suscité de l'intérêt qui a conduit à ce que je sois à developper une applis pour toutes les agences devant être consolidé au siège. Pour ce faire il faut déjà un très bonne gestion des paramètres et uen application a structure modulaire mais avec un noyau commun non négociable. Alors cette DLL a été concu avec une idée bien précise de ce que je voulais ce qui a orienté mon analyse. Dans notre métier ce qui bouge regulièrement ce sont les tarifs. Je dois écrire un logiciel qui doit avoir l'intelligence de s'adapter à toute formule de tarif quelque soit les paramètres. C'est la raison pour laquelle toutes mes dernières sources sont orientés dans une vision globale, multi-paramètres externes et surtout intuitive, elles doivent pouvoir donner un résultat juste, indépendamment du logiciel qui l'utilise, voir mes source http://www.vbfrance.com/codes/UTILISATION-INTELLIGENTE-WORD-REALISER-ETATS_44998.aspx, http://www.vbfrance.com/codes/REQUETEUR-BASE-DONNEES-TRES-SIMPLE-UTILISATION-TRES-INTERESSANT_43966.aspx qui refletent bien cet esprit.
Par contre, va faire un tour par là : http://www.vbfrance.com/codes/CALCULATRICE-GRAPHIQUE-VBS_28465.aspx
Tu trouvera sans doute des liens entre nos deux sources.
Le principe de la mienne est de créer une interface en VB à l'interpréteur VBS et de permettre au script d'exécuter des fonctions VB compilées.
Apres tu utiliseras la méthode FunctionFormula ("RetourneExpression") pour avoir l'expression déjà ready pour le calcul ==> Apres tu utiliseras la méthode ExecuteFunctionStatement ("RetourneExpression") pour avoir l'expression déjà ready pour le calcul.
je repasses tous les paramètres à la DLL, après la seule chose à faire c'est d'utiliser la méthode FunctionFormula(NomDeLaFonction) ==> je repasses tous les paramètres à la DLL, après la seule chose à faire c'est d'utiliser la méthode ExecuteFunctionStatement (NomDeLaFonction)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.