IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.NET] Problème pour Marshaliser une API


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par défaut [VB.NET] Problème pour Marshaliser une API
    Bonjour tlm,

    je n'arrive pas à trouver la bonne formulation pour utiliser la fonction CeReadFile.
    MSDN dit : http://msdn.microsoft.com/library/de...adfilerapi.asp

    Dans mon code je la déclare :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Declare Function CeCreateFile Lib "rapi.dll" (<MarshalAs(UnmanagedType.LPWStr)> ByVal lpFileName As String, ByVal dwDesiredAccess As Integer, ByVal dwShareMode As Integer, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDistribution As Integer, ByVal dwFlagsAndAttributes As Integer, ByVal hTemplateFile As Integer) As IntPtr
     
        Private Declare Function CeReadFile Lib "rapi.dll" (ByVal hFile As IntPtr, <MarshalAs(UnmanagedType.LPArray)> ByVal lpBuffer() As Byte, 
    ByVal nNumberOfBytesToRead As Integer, ByRef lpNumberOfBytesRead As Integer, ByRef lpOverlapped As Integer) As Boolean
    et plus loin dans code j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim bLecture As Boolean = False
    Dim nbCharLu As Integer
    dim myBufferEntree(1) As Byte '
    dim iNbCharALire As Integer = 1
    Dim hdlFichier As IntPtr    
     
    hdlFichier = CeCreateFile(chemFichierSource, GENERIC_READ Or GENERIC_WRITE, 0, Nothing,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0)
    If hdlFichier.ToInt32 <> INVALID_HANDLE_VALUE Then
         bLecture = CeReadFile(hdlFichier, myBufferEntree, iNbCharALire,     nbCharLu, 0)
          If not bLecture Then
                Affiche(CeGetLastError.ToString)
          end if
    end if
    CeGetLastError retourne toujours l'erreur 87 : paramétre incorecte!

    Quelqu'un peut m'aider svp.

    Lamalice.

  2. #2
    Membre Expert
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Par défaut
    Eventuellement ici : http://www.pinvoke.net/
    avec une recherche sur ceReadFile

    @+

  3. #3
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Par défaut
    c bon, g trouvé. L'erreur vient de ma déclaration api de CeReadFile.
    La bonne c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Declare Function CeReadFile Lib "rapi.dll" (ByVal hFile As IntPtr, <MarshalAs(UnmanagedType.LPArray)> ByVal lpBuffer() As Byte, 
    ByVal nNumberOfBytesToRead As Integer, ByRef lpNumberOfBytesRead As Integer, ByVal lpOverlapped As Integer) As Boolean
    Le dernier paramétre est passé par valeur et non par référence, malgré que l'api demande un pointeur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/09/2010, 16h39
  2. Problème pour afficher une video en vb.net
    Par hugo7 dans le forum ASP.NET
    Réponses: 10
    Dernier message: 09/08/2009, 23h48
  3. [VB.NET][WebServices] Problème pour trouver une Assembly
    Par sleeloo dans le forum Services Web
    Réponses: 3
    Dernier message: 19/11/2006, 12h45
  4. [VB.NET] problème pour piloter une appli. excel 2003
    Par Pynuch dans le forum Windows Forms
    Réponses: 13
    Dernier message: 16/11/2005, 13h02
  5. [VB.NET] Problème pour alimenter une listbox.
    Par gueguen23 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/01/2005, 14h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo