Appelé du code contenu dans un fichier

Résolu
Toto3544 Messages postés 24 Date d'inscription samedi 24 mars 2007 Statut Membre Dernière intervention 28 avril 2011 - 21 nov. 2007 à 15:36
Toto3544 Messages postés 24 Date d'inscription samedi 24 mars 2007 Statut Membre Dernière intervention 28 avril 2011 - 22 nov. 2007 à 10:23
Salut à tous.

Voilà, j'aurais voulu savoir s'il était possible d'appeler à partir de vb6 du code contenu dans un fichier.

exemple:
Voilà ce que contiendrai mon fichier, et je voudrai appeler ce bout de code à partir de mon appli vb6 en passant en paramètre ma variable Valeur.

dim chaine as string


Select Case Valeur
    Case 1 = 1
        chaine = "réponse 1"
    Case 2 = 2
        chaine = "réponse 2"
End Select
return chaine

je veux pouvoir modifier mon code directement dans le bloc note par exemple, sans être obliger de repasser par visual studio.

J'espère avoir été suffisament clair.

Merci à tous

7 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 nov. 2007 à 16:29
Re,
Ah ca change la donne Tant pis mon petit exemple est pres alors je le montre.
C'est moins facile qu'en FBSL... mais bon

Option Explicit

Private Sub Form_Load()
'Le contrenu de "C:\Toto.txt est
'Function GetValeur(Chaine, Retour)
'Select Case Chaine
'    Case "1": Retour = "Reponse 1"
'    Case "2": Retour = "Reponse 2"
'    Case Else: Retour = "Reponse Inconnue"
'End Select
'End Function
   Call InterpreteCode("C:\toto.txt")
End Function<hr />

Private Sub InterpreteCode(ByVal Fichier As String)
Dim NumFile As Integer
Dim Contenu As String
'IlFaut Cocher en référence
'Microsoft Script Control 1.0
Dim MScript As New ScriptControl

   NumFile = FreeFile
   'Récupère le contenu entier du fichier
   Open Fichier For Binary As NumFile
   Contenu = String(LOF(NumFile), 0)
   Get #NumFile, , Contenu
   Close #NumFile
   
   'ATTENTION LES PARAMETRES
   'DOIVENT ETRE VARIANT
   Dim Param
   Dim Retour
   Param = "156"
   With MScript
       'Langage du script
       .Language = "VBScript"
       'Reset Eventuel
       Call .AddCode(Contenu)
       'IL faut connaitre le nom de la procédure
       Call .Run("GetValeur", Param, Retour)
   End With
   
   MsgBox Retour
End Sub<hr />, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
3
GEDDi Messages postés 206 Date d'inscription lundi 22 novembre 1999 Statut Membre Dernière intervention 3 juillet 2008
21 nov. 2007 à 15:45
Héhé,

En VBA tu peux 'injecter' un module de code dans Excel, Word, PPT par exemple et le jouer dans l'objet CodePane, mais en VB 6 je ne pense pas que tu puisses le faire :)

Essayes avec mon langage( FBSL, tres proche du VB (cf dans mon link) ) qui lui le permet tres simplement de cette manière :
Exemple tu as un fichier 'Toto.code' dans lequel tu as mis du code 'dynamique' cad pret à etre 'joué' depuis un programme 'compilé' mais ne connaissant pas encore le contenu de 'Toto.code'

Donc tapes ceci dans ton programme principal, quu tu vas ensuite compiler :
#include_once "./Toto.code"

C'est tout, et ça marche :)

Gérôme GUILLEMIN
Auteur du langage FBSL
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 nov. 2007 à 16:06
Salut,
Sinon en VB6 tu utilises le ScriptControl qui te permet de faire interpreter des chaine de caratere comme des procédures.

Je prépare un petit exemple.

@+: Ju£i?n
Pensez: Réponse acceptée
0
Toto3544 Messages postés 24 Date d'inscription samedi 24 mars 2007 Statut Membre Dernière intervention 28 avril 2011
21 nov. 2007 à 16:27
Merci pour vos réponse.

En faite, je ne veux pas être obligé de déclarer mon fichier au préalable.
Je veux pouvoir en ajouter un quand je veux, à la racine de mon appli, sans modifier mon code principal.

Genre faire un appel par un shell ou un truc dans le genre et puis c tout. Pas d'include.

Est-ce possible?

Encore merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Toto3544 Messages postés 24 Date d'inscription samedi 24 mars 2007 Statut Membre Dernière intervention 28 avril 2011
21 nov. 2007 à 16:50
Merci jrivet.

Ta réponse m'intéresse.
J'essayerai ça demain et vous tien au courant.

A+

ps: je suis ouvert à toutes autres solutions
0
GEDDi Messages postés 206 Date d'inscription lundi 22 novembre 1999 Statut Membre Dernière intervention 3 juillet 2008
21 nov. 2007 à 21:01
Hello,

Voici du code VBA (VB et portable facilement en VBnet) qui permet de charger FBSL.DLL et donc de jouer du code FBSL à la volée et de récupérer le retour :

Option Explicit

Private Declare Function FBSL_ExecuteScriptFile Lib "fbsl.dll" (ByVal szScriptfile$) As Long
Private Declare Function FBSL_GetReturnValue Lib "fbsl.dll" (ByVal pValue As Long, ByVal iType As Long) As Long
Private Declare Function FBSL_ExecuteScriptBuffer Lib "fbsl.dll" (ByVal ExternalBuffer$) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

Const FBVT_STRING = 30
Const FBVT_INTEGER = 3
Const FBVT_DOUBLE = 5
Const FBVT_SINGLE = 4

Const ccode = "Return Right(""Hello"", 4) & 5 + 5 / 12 * PI"

Public Sub cmdRetCode()
    If Trim$(ccode) <> "" Then
        Dim i As Long
        FBSL_ExecuteScriptBuffer ccode: DoEvents
        'i = FBSL_GetReturnValue(1&, 0) ' Get the return type
        i = FBSL_GetReturnValue(0&, FBVT_STRING)
        Dim sSave As String, mStr As String        sSave Space(i): mStr Space(i)
        FBSL_GetReturnValue StrPtr(sSave), FBVT_STRING
        CopyMemory ByVal StrPtr(mStr), ByVal StrPtr(sSave), i
        sSave = Left(StrConv(mStr, vbUnicode), i)
        MsgBox "Returned value == " & sSave, vbApplicationModal, "RETURN CODE IS :"
    End If
End Sub

Gérôme GUILLEMIN
Auteur du langage FBSL
0
Toto3544 Messages postés 24 Date d'inscription samedi 24 mars 2007 Statut Membre Dernière intervention 28 avril 2011
22 nov. 2007 à 10:23
Merci GEDDi pour ton code, mais je vais garder la solution de jrivet que j'ai réussi à faire fonctionner.
Encore merci à vous.

A+
0
Rejoignez-nous