Question très bête (Vol.2) [Résolu]

Signaler
Messages postés
119
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
28 avril 2008
-
Messages postés
119
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
28 avril 2008
-
J'ai trouvé la source suivante : http://www.vbfrance.com/codes/NET-TYPE-STRUCTURE-COMPATIBILITE-VB6_25830.aspx

Je n'arrive pas à la faire marcher. J'ai ouvert un projet vide avec un fichier vide et j'ai tapé ceci (en VB.Net sous SharpDevelop) :

Option Explicit On
  
Imports System.Runtime.InteropServices

Public Class Struct

   Public Sub main()
    OnWrite()
    OnRead()
   End Sub

   (son code)
End class

1 erreur : Aucune méthode main accessible avec une signature appropriée n'a été trouvé dans Essai (nom de mon projet)
___________________________
Sinon, question générale : de quel minimum a besoin un pgrm VB.Net pour démarrer ? La syntaxe de base, ce n'est pas çà :

class bidule
  sub main()

  end sub

  (autres procédures)

end class

8 réponses

Messages postés
119
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
28 avril 2008

Comme dit, j'ai fait un copier-coller dans un nouveau projet. Mais cette fois-ci, j'ai changé :

"public class bidule" par "module bidule" et ça fonctionne. Les Class, ça doit être pour les formulaires entre autres.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
regarde dans les propriétés du projet si ta procedure main est bien définie comme object de démarrage.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
je ne faisais pas d'allusion avec le mot 'Struct' qui serait réservé...

simplement que ta sub Main serait mal placée...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
Vois ca en direct avec l'auteur... une fois de plus.

Je crois que ce qui gène #Dev, c'est que Main est dans Struct

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
119
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
28 avril 2008

Elle ne répond pas.
Messages postés
119
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
28 avril 2008

J'ai nommé ma classe "Public Class Struct", mais avec "Public class bidule", ça ne marche pas non plus.
Messages postés
119
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
28 avril 2008

Non effectivement. J'ai rectifié le tir, mais il m'affiche une autre erreur :
"Sub main est introuvable dans main".


Voici 2 pages écrans :



http://img146.imageshack.us/img146/3723/essai1xv0.jpg



http://img183.imageshack.us/img183/8652/essai2in4.jpg

(j'ai tapé : "Main" dans Objet de demarrage)


Et l'intégralité de mon code tapé :



Option Explicit On
 
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Imports System.IO



Public Class Bidule



    Public Sub Main()
      OnWrite()
      OnRead()
    End Sub



    Private Structure TYPETEST
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=8)> _
        Dim Test1 As String
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> _
        Dim Test2() As Byte
        Sub New(ByVal e as Object) 
            ReDim Test2(7)
        End Sub
    End Structure
 
 
 
    Public Function ByteToStruct(ByRef Data() As Byte) As Object
        Dim Handle As GCHandle = GCHandle.Alloc(Data, GCHandleType.Pinned)
        Dim Pointer As IntPtr = Handle.AddrOfPinnedObject()
        ByteToStruct = DirectCast(Marshal.PtrToStructure(Pointer, GetType(TYPETEST)), TYPETEST)
        Handle.Free() 
    End Function
 
    Public Function StructToByte(ByRef Obj As Object) As Byte()
        Dim Data(Marshal.SizeOf(Obj)) As Byte
        Dim Handle As GCHandle = GCHandle.Alloc(Data, GCHandleType.Pinned)
        Dim Pointer As IntPtr = Handle.AddrOfPinnedObject()
        Marshal.StructureToPtr(Obj, Pointer, False)
        Handle.Free()
        Return Data
    End Function 
  
   Public Sub OnWrite()
        Dim vTest As New TYPETEST(0)
        Dim vData() As Byte
        With New IO.FileStream("Test.txt", IO.FileMode.OpenOrCreate)
            vTest.Test1 = "Manu"
            vData = StructToByte(vTest)
            .Write(vData, 0, vData.Length)
            .Close()
        End With
    End Sub
 
    Public Sub OnRead()
        Dim vTest As New TYPETEST(0)
        Dim vData() As Byte
        With New IO.FileStream("Test.txt", IO.FileMode.Open)
            .Read(vData, 0, vData.Length) 
            vTest = ByteToStruct(vData)
            messagebox.show (vTest.test1)
            .Close()
        End With
    End Sub



End Class


_______________________________________
Pendant 3 semaines, tout roulait ! Aucune aide à demander (les sources suffisaient). Mon projet perso marchait bien. Et depuis 2 semaines, je n'arrive pas à écrire une ch'ti struture à dans un fichier binaire. Et là, je n'arrive même pas à exécuter des sources fournies  :je touche le fond ! Gloup, gloup....   

Du coup, je suis obligé d'aider les autres en VBA pour passer le temps

Maman, ma tétine ! Vais dormir !  
Messages postés
119
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
28 avril 2008

Ça y est ça marche. J'ai recommencé dans un nouveau projet tout simplement.