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

_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 11 janv. 2007 à 10:18 - Dernière réponse : _Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention
- 11 janv. 2007 à 11:58
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
Afficher la suite 

8 réponses

Répondre au sujet
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 11 janv. 2007 à 11:58
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de _Fabien
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 11 janv. 2007 à 10:49
+1
Utile
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 #
Commenter la réponse de cs_casy
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 11 janv. 2007 à 11:07
+1
Utile
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
Commenter la réponse de Renfield
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 11 janv. 2007 à 10:28
0
Utile
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
Commenter la réponse de Renfield
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 11 janv. 2007 à 10:33
0
Utile
Elle ne répond pas.
Commenter la réponse de _Fabien
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 11 janv. 2007 à 10:36
0
Utile
J'ai nommé ma classe "Public Class Struct", mais avec "Public class bidule", ça ne marche pas non plus.
Commenter la réponse de _Fabien
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 11 janv. 2007 à 11:39
0
Utile
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 !  
Commenter la réponse de _Fabien
_Fabien 119 Messages postés vendredi 17 novembre 2006Date d'inscription 28 avril 2008 Dernière intervention - 11 janv. 2007 à 11:49
0
Utile
Ça y est ça marche. J'ai recommencé dans un nouveau projet tout simplement.
Commenter la réponse de _Fabien

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.