Dll pour executer les fonctions et procedures externes a ton appli meme deja compile

Soyez le premier à donner votre avis sur cette source.

Vue 8 190 fois - Téléchargée 713 fois

Description

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.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

jimbilba
Messages postés
10
Date d'inscription
lundi 25 janvier 2010
Statut
Membre
Dernière intervention
12 juillet 2013
-
Salut,

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 !
xpert12
Messages postés
114
Date d'inscription
lundi 5 février 2007
Statut
Membre
Dernière intervention
10 septembre 2010
-
Super,

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 !
cs_asimengo
Messages postés
281
Date d'inscription
jeudi 24 mars 2005
Statut
Membre
Dernière intervention
18 mars 2009
-
@Flachy Joe: Mince 5135 download, c fou ca. J'ai regardé ton code mais je n'ai pas pu l'exécuter, mais j'ai parcouru le code et c'est vrai qu'on ressent la même problématique, celle d'appeler des fonctions externes et lui passer les paramètres. J'ai bien vu que tu as une gestion d'arguments et la création de fonction a 3 lignes (function ..., x=..., end funtion).

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.
Flachy Joe
Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
1 -
Mon "module de calcul" me servait juste à accélérer le tracé de graph à partir de leur équation, parce que le VBScript n'était pas au top.
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.
cs_asimengo
Messages postés
281
Date d'inscription
jeudi 24 mars 2005
Statut
Membre
Dernière intervention
18 mars 2009
-
Sorry, petite confusion dans le commentaire ci-dessus, voir les corrections ci-dessous.

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.