Liaison Tardive - Option Strict

Résolu
nicelife90 Messages postés 676 Statut Membre -  
 Utilisateur anonyme -
Bonjour,

Voici une parcelle de code que j'ai créé
 
Dim FSys = CreateObject("Scripting.FileSystemObject")
Dim realmlist = FSys.CreateTextFile(file_path & "\Data\" & language & "\realmlist.wtf")
With realmlist
     .writeLine("set realmlist " & My.Settings.RealmSelected)
End With

j'ai appliquer l'option option strict à mon projet et voila que j'ai un message concernant cette ligne :

Dim realmlist = FSys.CreateTextFile(file_path & "\Data\" & language & "\realmlist.wtf")

Option Strict On rejette toute liaison tardive.

et cette ligne :

.writeLine("set realmlist " & My.Settings.RealmSelected)

Option Strict On rejette toute liaison tardive.

Comment puis-je régler cette erreur ?



--
Bonne chance à toi et bonne fin de journée!
N!C£-L!F£!!!

1 réponse

  1. Utilisateur anonyme
     
    Bonjour,

    La ligne :

    Dim realmlist = FSys.CreateTextFile(...

    devrait se lire :
    Dim realmlist
    Set realmlist = FSys.CreateTextFile(...

    Toutefois, je ne suis pas familier dans l'utilisation du VBS dans
    un projet .Net

    Sous VBS, je n'ai aucun doute, mais du VBS sous .NET ???

    Cdt

    Lupin
    0
    1. nicelife90 Messages postés 676 Statut Membre 151
       
      Ici il s'agit d'un problème de liaison tardive donc même si je déclare realmlist avant de lui attribuer une valeur rien ne change.

      si tu met ce bloque dans n'importe quel sub exemple un sub de bouton :

      Dim FSys = CreateObject("Scripting.FileSystemObject")  
      Dim realmlist = FSys.CreateTextFile(file_path & "\Data\" & language & "\realmlist.wtf")  
      With realmlist  
           .writeLine("set realmlist " & My.Settings.RealmSelected)  
      End With  
      

      et que tu met option strict a ON au niveau de ton projet tu vera de quel type d'erreur il s'agit!

      PS : je tiens a dire que la syntaxe de ce bloque de code est totalement fonctionnel avec option strict a OFF
      0
    2. Utilisateur anonyme
       
      re:

      La liaison tardive est justement créé parce que la variable est déclaré sans type,
      et que l'instruction veut créer un type d'objet et le lié à cette variable.

      Comme spécifié, je suis sur de mon code sous VBS :

      <code>
      ' Fichier Ecrire.vbs

      Const ctePourLecture = 1
      Const ctePourEcrire = 2
      Const ctePourAjouter = 8
      Const cteRapport = "Rapport.txt"

      Dim objFSO, objFichier, varNomFic

      Set objFSO = CreateObject("Scripting.FileSystemObject")

      ' Localisation du fichier à écrire
      varNomFic = WScript.ScriptFullName
      varNomFic = Left(varNomFic, InStrRev(varNomFic, "\"))
      varNomFic = varNomFic & cteRapport

      ' Valide si fichier existe
      If ( objFSO.FileExists(varNomFic) ) Then
      Set objFichier = objFSO.OpenTextFile(varNomFic,ctePourAjouter)
      Else
      Set objFichier = objFSO.CreateTextFile(varNomFic,ctePourEcrire)
      End If
      <code>

      Ce code a été éprouvé de façon très explicite.

      Malheureusement, je ne puis t'aider davantage, je n'ai à ce jour jamais utlisé
      les objets de "Scripting" dans un projet .NET.

      Je te recommande d'utiliser les classes du FrameWork pour lire/écrire dans un fichier.

      Ex.: https://plasserre.developpez.com/cours/vb-net/?page=langage-vb8#V-AC

      Cdt

      Lupin
      0
    3. nicelife90 Messages postés 676 Statut Membre 151
       
      Oui c'est ce que je vais faire merci
      0
    4. Utilisateur anonyme
       
      re:

      Voici un exemple brut :

      Imports System.IO
      
      Public Class EcrireUnFichier
      
      	Public Sub EcrireUnFichier()
      
      		Dim file_path As String = ChercheDossier()
      		Dim Language As String = "fr"
      
      		Dim Dossier As String = String.Concat(file_path, "Data\", Language, "\")
      
      		Dim NomFichier As String = Dossier & "realmlist.wtf"
      
      		Dim LeFichier As New StreamWriter(NomFichier, True)
      
      		LeFichier.WriteLine("Lupin")
      		LeFichier.WriteLine(System.DateTime.Now.ToShortDateString)
      
      		LeFichier.Close()
      
      	End Sub
      
      	Private Function ChercheDossier() As String
      
      		Dim Parcourrir As New FolderBrowserDialog
      		Dim Chemin As String = String.Empty
      
      		With Parcourrir
      
      			If (.ShowDialog = Windows.Forms.DialogResult.OK) Then
      				Chemin = .SelectedPath
      				Chemin &= "\"
      			End If
      
      		End With
      
      		Return Chemin
      
      	End Function
      
      End Class
      


      Cdt

      Lupin
      0