(pas une question, une pitite info) : Run-time exception thrown : System.AccessV

Résolu
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 9 sept. 2008 à 17:15
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010 - 12 févr. 2009 à 09:57
Bonjour ,

Je développe un logiciel qui doit (entre autre) exécuté un ".cmd" et attendre sa mort.

J'ai rencontré un problème (qui m'a bloqué presque deux heure pour une connerie) :
"Run-time
exception thrown : System.AccessViolationException - Tentative de
lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une
autre mémoire est endommagée."

Cette erreur se corrige TRÈS facilement (quand on sait comment )

Il faut tout simplement déclarer les variable utilisé dans les API en Int32 et non pas en Long (l'info n'es pas dans MSDN , ou je ne l'es pas trouvé
)

Aller en prime mon titi module en cadeau
<hr size="2" width="100%" />Module ModuleShell
    '------------------------------------------------------------------------------
    'Objectif :
    ' Gérer les taches à exécuté
    'Liste des fonctions public et résumé :
    '   - Contain_ID_Tache : Test si l'ID_Tache existe dans la collection
    '   - ExecuteTache : Exécute une tache (exe, bat, cmd, ...) et retourne le ProssessID
    '   - ExecuteTacheAttendMort : Exécute une tache et attend sa mort pour quitter la fonction
    '   - TacheEnCours (sur défini) : Test si un processus est actif (en mémoire)
    '   - TueTache (sur défini) : Tue une tache en exécution (en mémoire)
    '   - RetrouveProssessID : Retourne le ProssessID de la tache nommé
    '
    ' Fait le : 09/09/2008
    ' Fait par Waurzuczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------

    Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Int32)
    Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Int32, ByVal uExitCode As Int32) As Int32
   
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal
ProcessHandle As Int32, ByVal DesiredAccess As Int32, ByVal TokenHandle
As Int32) As Int32
    Private Declare Function OpenProcess Lib
"Kernel32.dll" (ByVal dwDesiredAccess As Int32, ByVal bInheritHandle As
Int32, ByVal dwProcessID As Int32) As Int32
    Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Int32, ByRef lpExitCode As Int32) As Int32

    Private ListeTache As New System.Collections.Generic.Dictionary(Of String, Long)

    Private Const CoIn32_DelaisAttenteEntreTestMort As Int32 = 1000

    '------------------------------------------------------------------------------
    'Objectif :
    'Test si l'ID_Tache existe dans la collection
    ' Input :
    '   ID_Tache = Un nom de tache en toute lettre
    ' Output
    '   Boolean = Vrais si l'ID_Tache existe dans la collection faux si non
    ' Fait le : 09/09/2008
    ' Fait par Waurzuczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function Contain_ID_Tache(ByVal ID_Tache As String) As Boolean
        Return ListeTache.ContainsKey(ID_Tache)
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Exécute une tache et retourne le ProssessID
    ' Input :
    '   FichierExecutable : Chemin complet de la tache à exécuté
    '   ID_Tache (optionnel) : Nom à stocké pour retrouver le ProssessID
    ' Output
    '   Long = Le ProssessID de la tache ou 0 si erreur (fichier exécutable non trouvé)
    ' Fait le : 09/09/2008
    ' Fait par Waurzuczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function ExecuteTache(ByVal FichierExecutable As String, Optional ByVal ID_Tache As String = Nothing) As Long
        Dim ProssessID As Int32
        Try
            ProssessID = Shell(FichierExecutable)
            If ID_Tache IsNot Nothing Then
                ListeTache.Add(ID_Tache, ProssessID)
            End If
            Return ProssessID
        Catch ex As Exception
            Return 0
        End Try
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Exécute une tache et attend sa mort pour quitter la fonction
    ' Input :
    '   FichierExecutable : Chemin complet de la tache à exécuté
    ' Output
    '   Boolean = Vrais si pas de problème faux si non (fichier exécutable non trouvé)
    ' Fait le : 09/09/2008
    ' Fait par Waurzuczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function ExecuteTacheAttendMort(ByVal FichierExecutable As String) As Boolean
        Dim ProssessID As Long
        ProssessID = ExecuteTache(FichierExecutable)
        If ProssessID <> 0 Then
            While TacheEnCours(ProssessID)
                Sleep(CoIn32_DelaisAttenteEntreTestMort)
                Application.DoEvents()
            End While
            Return True
        Else
            Return False
        End If
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Test si la tache passé en paramètre est active (en mémoire)
    ' Input :
    '   ID_Tache : Nom de la tache (nom passé à ExecuteTache)
    ' Output
    '   Boolean : Vrais si la tache est en cours Faux si non
    '             Si la tache n'est plus en cours elle est supprimer de la collection
    '             Si le nom de la tache n'existe pas dans la collection retourne Faux
    ' Fait le : 09/09/2008
    ' Fait par Waurzuczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function TacheEnCours(ByVal ID_Tache As String) As Boolean
        If ListeTache.ContainsKey(ID_Tache) Then
            If TacheEnCours(ListeTache(ID_Tache)) Then
                Return True
            Else
                ListeTache.Remove(ID_Tache)
                Return False
            End If
        Else
            Return False
        End If
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Test si la tache passé en paramètre est active (en mémoire)
    ' Input :
    '   ProssessID : Le ProssessID à tester
    ' Output
    '   Boolean : Vrais si la tache est en cours Faux si non
    ' Fait le : 09/09/2008
    ' Fait par Waurzuczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function TacheEnCours(ByVal ProssessID As Long) As Boolean
        Dim lExitCode As Int32
        GetExitCodeProcess(OpenProcess(&H1F0FFF, 0&, ProssessID), lExitCode)
        Return (lExitCode = &H103&)
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Tue la tache passé en paramétre
    ' Input :
    '   ID_Tache : Nom de la tache (nom passé à ExecuteTache)
    ' Output
    '   Boolean : Vrais si la tache à été correctement tuée
    '             Si la tache n'est plus en cours elle est supprimer de la collection
    '             Si le nom de la tache n'existe pas dans la collection retourne Faux
    ' Fait le : 09/09/2008
    ' Fait par Waurzuczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function TueTache(ByVal ID_Tache As String) As Boolean
        If ListeTache.ContainsKey(ID_Tache) Then
            If TueTache(ListeTache(ID_Tache)) Then
                ListeTache.Remove(ID_Tache)
                Return True
            Else
                Return False
            End If
        Else
            Return False
        End If
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Tue la tache passé en paramètre
    ' Input :
    '   ProssessID : Le ProssessID à tué
    ' Output
    '   Boolean : Vrais si la tache à été correctement tuée ou si elle étais déjà morte
    '             Faux en cas d'erreur (normalement n'arrive jamais)
    ' Fait le : 09/09/2008
    ' Fait par Waurzuczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function TueTache(ByVal ProssessID As Long) As Boolean
        Try
            If TacheEnCours(ProssessID) Then
                Dim lngHwndProcess As Long
                lngHwndProcess = OpenProcess(&H1F0FFF, 0&, ProssessID)
                TerminateProcess(lngHwndProcess, 0&)
            End If
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Retourne le ProssessID de la tache nommé
    ' Input :
    '   ID_Tache : Nom de la tache (nom passé à ExecuteTache)
    ' Output
    '   Long : Le ProssessID de la tache ou 0 si elle n'existe pas dans la collection
    ' Fait le : 09/09/2008
    ' Fait par Waurzyczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function RetrouveProssessID(ByVal ID_Tache As String) As Long
        If ListeTache.ContainsKey(ID_Tache) Then
            Return ListeTache(ID_Tache)
        Else
            Return 0
        End If
    End Function
End Module

<hr size="2" width="100%" />

PS :
Je poste ce message pour que si d'autre rencontre se problème ils sachent le corigé rapidement.
Vous
pouvez bien entendu utilisé les fonctions présentes dans ce message.
Mais merci de ne pas supprimer les entêtes de fonctions et de module.

Bonne prog
Amicalement
Pensez "Réponse acceptée"

7 réponses

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
9 sept. 2008 à 17:28
Déjà une Maj

Un oublie DZL (ajout des fonctions AttendMort)

<hr size="2" width="100%" />Module ModuleShell
    '------------------------------------------------------------------------------
    'Objectif :
    ' Gérer les taches à exécuté
    'Liste des fonctions public et résumé :
    '   - Contain_ID_Tache : Test si l'ID_Tache existe dans la collection
    '   - ExecuteTache : Exécute une tache (exe, bat, cmd, ...) et retourne le ProssessID
    '   - ExecuteTacheAttendMort : Exécute une tache et attend sa mort pour quitter la fonction
    '   - TacheEnCours (sur défini) : Test si un processus est actif (en mémoire)
    '   - TueTache (sur défini) : Tue une tache en exécution (en mémoire)
    '   - RetrouveProssessID : Retourne le ProssessID de la tache nommé
    '   - AttendMort (sur défini) : Attend la mort d'une tache
    '
    ' Fait le : 09/09/2008
    ' Fait par Waurzyczka Vincent (Polack77)
    ' Version 1.1
    '------------------------------------------------------------------------------

    Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Int32)
    Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Int32, ByVal uExitCode As Int32) As Int32
    Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Int32, ByVal DesiredAccess As Int32, ByVal TokenHandle As Int32) As Int32
    Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccess As Int32, ByVal bInheritHandle As Int32, ByVal dwProcessID As Int32) As Int32
    Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Int32, ByRef lpExitCode As Int32) As Int32

    Private ListeTache As New System.Collections.Generic.Dictionary(Of String, Long)

    Private Const CoIn32_DelaisAttenteEntreTestMort As Int32 = 1000

    '------------------------------------------------------------------------------
    'Objectif :
    'Test si l'ID_Tache existe dans la collection
    ' Input :
    '   ID_Tache = Un nom de tache en toute lettre
    ' Output
    '   Boolean = Vrais si l'ID_Tache existe dans la collection faux si non
    ' Fait le : 09/09/2008
    ' Fait par Waurzyczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function Contain_ID_Tache(ByVal ID_Tache As String) As Boolean
        Return ListeTache.ContainsKey(ID_Tache)
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Exécute une tache et retourne le ProssessID
    ' Input :
    '   FichierExecutable : Chemin complet de la tache à exécuté
    '   ID_Tache (optionnel) : Nom à stocké pour retrouver le ProssessID
    ' Output
    '   Long = Le ProssessID de la tache ou 0 si erreur (fichier exécutable non trouvé)
    ' Fait le : 09/09/2008
    ' Fait par Waurzyczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function ExecuteTache(ByVal FichierExecutable As String, Optional ByVal ID_Tache As String = Nothing) As Long
        Dim ProssessID As Int32
        Try
            ProssessID = Shell(FichierExecutable)
            If ID_Tache IsNot Nothing Then
                ListeTache.Add(ID_Tache, ProssessID)
            End If
            Return ProssessID
        Catch ex As Exception
            Return 0
        End Try
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Exécute une tache et attend sa mort pour quitter la fonction
    ' Input :
    '   FichierExecutable : Chemin complet de la tache à exécuté
    ' Output
    '   Boolean = Vrais si pas de problème faux si non (fichier exécutable non trouvé)
    ' Fait le : 09/09/2008
    ' Fait par Waurzyczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function ExecuteTacheAttendMort(ByVal FichierExecutable As String) As Boolean
        Dim ProssessID As Long
        ProssessID = ExecuteTache(FichierExecutable)
        If ProssessID <> 0 Then
            AttendMort(ProssessID)
            Return True
        Else
            Return False
        End If
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Test si la tache passé en paramètre est active (en mémoire)
    ' Input :
    '   ID_Tache : Nom de la tache (nom passé à ExecuteTache)
    ' Output
    '   Boolean : Vrais si la tache est en cours Faux si non
    '             Si la tache n'est plus en cours elle est supprimer de la collection
    '             Si le nom de la tache n'existe pas dans la collection retourne Faux
    ' Fait le : 09/09/2008
    ' Fait par Waurzyczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function TacheEnCours(ByVal ID_Tache As String) As Boolean
        If ListeTache.ContainsKey(ID_Tache) Then
            If TacheEnCours(ListeTache(ID_Tache)) Then
                Return True
            Else
                ListeTache.Remove(ID_Tache)
                Return False
            End If
        Else
            Return False
        End If
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Test si la tache passé en paramètre est active (en mémoire)
    ' Input :
    '   ProssessID : Le ProssessID à tester
    ' Output
    '   Boolean : Vrais si la tache est en cours Faux si non
    ' Fait le : 09/09/2008
    ' Fait par Waurzyczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function TacheEnCours(ByVal ProssessID As Long) As Boolean
        Dim lExitCode As Int32
        GetExitCodeProcess(OpenProcess(&H1F0FFF, 0&, ProssessID), lExitCode)
        Return (lExitCode = &H103&)
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Tue la tache passé en paramétre
    ' Input :
    '   ID_Tache : Nom de la tache (nom passé à ExecuteTache)
    ' Output
    '   Boolean : Vrais si la tache à été correctement tuée
    '             Si la tache n'est plus en cours elle est supprimer de la collection
    '             Si le nom de la tache n'existe pas dans la collection retourne Faux
    ' Fait le : 09/09/2008
    ' Fait par Waurzyczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function TueTache(ByVal ID_Tache As String) As Boolean
        If ListeTache.ContainsKey(ID_Tache) Then
            If TueTache(ListeTache(ID_Tache)) Then
                ListeTache.Remove(ID_Tache)
                Return True
            Else
                Return False
            End If
        Else
            Return False
        End If
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Tue la tache passé en paramètre
    ' Input :
    '   ProssessID : Le ProssessID à tué
    ' Output
    '   Boolean : Vrais si la tache à été correctement tuée ou si elle étais déjà morte
    '             Faux en cas d'erreur (normalement n'arrive jamais)
    ' Fait le : 09/09/2008
    ' Fait par Waurzyczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function TueTache(ByVal ProssessID As Long) As Boolean
        Try
            If TacheEnCours(ProssessID) Then
                Dim lngHwndProcess As Long
                lngHwndProcess = OpenProcess(&H1F0FFF, 0&, ProssessID)
                TerminateProcess(lngHwndProcess, 0&)
            End If
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Retourne le ProssessID de la tache nommé
    ' Input :
    '   ID_Tache : Nom de la tache (nom passé à ExecuteTache)
    ' Output
    '   Long : Le ProssessID de la tache ou 0 si elle n'existe pas dans la collection
    ' Fait le : 09/09/2008
    ' Fait par Waurzyczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function RetrouveProssessID(ByVal ID_Tache As String) As Long
        If ListeTache.ContainsKey(ID_Tache) Then
            Return ListeTache(ID_Tache)
        Else
            Return 0
        End If
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Attend la mort de la tache reçu
    ' Input :
    '   ID_Tache : Nom de la tache (nom passé à ExecuteTache)
    ' Output
    '   Boolean : Faux si ID_Tache n'existe pas dans la collection
    ' Fait le : 09/09/2008
    ' Fait par Waurzyczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Function AttendMort(ByVal ID_Tache As String) As Boolean
        If ListeTache.ContainsKey(ID_Tache) Then
            AttendMort(ListeTache(ID_Tache))
            Return True
        Else
            Return False
        End If
    End Function

    '------------------------------------------------------------------------------
    'Objectif :
    'Attend la mort de la tache reçu
    ' Input :
    '   ProssessID : Le ProssessID de la tache
    ' Fait le : 09/09/2008
    ' Fait par Waurzyczka Vincent (Polack77)
    ' Version 1.0
    '------------------------------------------------------------------------------
    Public Sub AttendMort(ByVal ProssessID As Long)
        While TacheEnCours(ProssessID)
            Sleep(CoIn32_DelaisAttenteEntreTestMort)
        End While
    End Sub
End Module
<hr size="2" width="100%" />
Amicalement
Pensez "Réponse acceptée"
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 sept. 2008 à 20:38
"...Il faut tout simplement déclarer les variable utilisé dans les API en Int32 et non pas en Long (l'info n'es pas dans MSDN , ou je ne l'es pas trouvé
)....
"

Si, si, elle y est, et à plusieurs endroits même. Même si parfois il faut savoir lire entre les lignes.
(Appel de code non managé, Différences entre VB6 et .Net, Utilisation des dll système, ........)

Et elle est même répétée plusieurs fois par semaine, ici même, sur le forum : Tout ce qui est déclaré en Long dans une API Windows est à déclarer en Integer en .Net

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
3
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
9 sept. 2008 à 17:16
Tien on ne peut plus acceptée le premier message ?!?!

Amicalement
Pensez "Réponse acceptée"
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
10 sept. 2008 à 10:30
Heeee oui en effet .

   On vas dire que je n'avais pas trop la pèche hier (je crois même que j'avais déjà posté sa ici, mais pas le module en cadeau, au moins mon post ne serviras pas à RIEN. Mais à presque rien )

   Bonne prog

Amicalement
Pensez "Réponse acceptée"
0

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

Posez votre question
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
10 févr. 2009 à 17:01
Bonjour,

j'ai eu le même problème sous visual studio 2008 :
Lors du déboggage, cela m'affiche "
<meta http-equiv= "Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cadeline%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" />
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]-->
<style>
<!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
@page Section1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tableau Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->

AccessViolationException –
Tentative de lecture ou d’écriture de mémoire protégée. Cela indique souvent qu’une
autre mémoire est endommagée."

Or la déclaration de
ma_variable
dans
ma_procedure
est bien de type Integer (à la place de Long sous VS6.0)




et l'appel de fonction qui se trouve dans ma_procédure soit :




Private Sub ma_procedure


()
'---déclarations---
Dim ma_variable1 As String
Dim ma_variable2 As Short
Dim ma_variable3 As Integer

'---initialisation du répertoire---
ma_variable1 = truc

ma_variable3 = appelle_fonction(..., ..., truc, Len(truc), ...)
mon-repertoire = Mid(Trim(truc), ..., ma_variable3)

End Sub

Je ne vois pas pourquoi il m'affiche ce message d'erreur alors que la conversion a bien été faite de Long à Integer ? Si vous avez quelque chose qui peut m'aider merci d'avance

Cordialement,
Ginger
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
11 févr. 2009 à 10:53
Tu pourrais nous en dire un peut plus ?
L'API utilisé, l'entête de fonction de "appelle_fonction", la ligne où est retourné l'exception
pck là c'est un peut juste quand même .

PS :
Crée une autre discution sur CS pour posé ta question colle simplement le lient ici à la rigueur, si non seul casy, qui à participé à ce topic, et moi ne verront ton message. Ici nous somme dans une discution crée il y à déjà pas mal de temps, et résolut en prime, donc il n'y à pas grand monde qui passe par ici

 Amicalement <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-pa
0
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
12 févr. 2009 à 09:57
Bonjour
La suite ici : http://www.vbfrance.com/forum/sujet-SOUS-VB2008-PROBLEME-ACCESSVIOLATIONEXCEPTION_1267867.aspx

J'avais vu pour la date, c'est pourquoi j'ai recrée un topic ailleurs nouveau ^_^
Merci,

Cordialement,
Ginger
0
Rejoignez-nous