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.