Sous VB2008 : problème AccessViolationException...

Résolu
Signaler
Messages postés
69
Date d'inscription
jeudi 8 janvier 2009
Statut
Membre
Dernière intervention
3 septembre 2010
-
Messages postés
69
Date d'inscription
jeudi 8 janvier 2009
Statut
Membre
Dernière intervention
3 septembre 2010
-
Bonjour,

Comme c'est arrivé à Polack77 le 09/09/08, à cette page :
http://www.vbfrance.com/forum/sujet-PAS-QUESTION-PITITE-INFO-RUN-TIME-EXCEPTION-THROWN_1200019.aspx


j'ai eu le même problème sous visual studio 2008 (je reposte mon message pour qu'il soit plus visible) :

Lors du déboggage, cela m'affiche "


<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, il faut absolument que je résolves cette erreur... Merci d'avance

Cordialement,
Ginger

7 réponses

Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019
1
Ton API c'est sa : GetPrivateProfileString

En Dot.Net le déclaration dois se faire comme sa :

PrivateDeclareFunction GetPrivateProfileString Lib "kernel32.dll" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName AsString, ByVal lpKeyName AsString, ByVal lpDefault AsString, ByVal lpReturnedBuffer As IntPtr, ByVal nSize AsInteger, ByVal lpFileName AsString) AsInteger

récup ici :"http://www.vbfrance.com/codes/MANIPULATION-FICHIERS-INI-VB-NET_35975.aspx"

Trouvé grâce à google (recherché "getprivateprofilestring vb.net" la première réponse )

Google est ton amis

Bonne prog (dit nous sa sa fonctionne maintenant)

 Amicalement <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-pa
Messages postés
11
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
4 juillet 2009

Si le message d'erreur est réellement une erreur, essai avec des balises "Try...End Try"
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
48
salut,
le problème évoqué n'est pas les types utilisés pour ses fonctions mais pour les API...

où est ton API?

montre-nous ton code complet çà sera plus pratique

ps : MID, TRIM, LEN, c'est du VB6 (compatibilité à décocher)....

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
Messages postés
69
Date d'inscription
jeudi 8 janvier 2009
Statut
Membre
Dernière intervention
3 septembre 2010

Bonjour

Je dois en fait réaliser la migration d'une appli de vb6 à vb.net (version 2008), j'ai fait ça grâce à l'assistant de mise à niveau, maintenant il faut que je déboggue l'appli.

Mon API c'est à dire ?

Je remet mon code (mais pas tout pour des raisons de confidentialités d'entreprise) :

------------------------------
Private Sub ReadIniFile()

'Déclarations

Dim s_retour As String
Dim i_free As Short
Dim l_ret As Integer

' Si le fichier OPA.ini n'existe pas, on le crée à vide pour le paramétrer ensuite via l UF
If UCase(Dir(gs_fichier_ini)) <> UCase(gs_fichier_ini_name) Then
i_free = FreeFile
FileOpen(i_free, gs_fichier_ini, OpenMode.Output)
' Ferme le fichier
FileClose(i_free)
Exit Sub
End If

'initialisation des repertoires
s_retour = Space(60)
l_ret = GetPrivateProfileString("REP", "REP_ROOT", "", s_retour, Len(s_retour), gs_fichier_ini)
gs_rep_root = Mid(Trim(s_retour), 1, l_ret)

'(...)

End Sub
------------------------------------------------

L'erreur se trouve au niveau de la variable l-ret...

Cordialement,
Ginger
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019
1
Houla je remarque que des espaces on été "mangé" :

"PrivateDeclareFunction" : est à remplacé par "Private/Public Declare Function"
"AsString" : est à remplacé par "As String"
"AsInteger" : est à remplacé par "As Integer"

Bonne prog

 Amicalement <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-pa
Messages postés
69
Date d'inscription
jeudi 8 janvier 2009
Statut
Membre
Dernière intervention
3 septembre 2010

Merci Polack, j'ai testé ton code que j'ai mis à la place du mien, sauf que j'ai gardé à la ligne 5 (d'après ce qui suit) le type String (As String au lieu de As IntPtr comme tu avais mis) parce que le programme attend une chaine de caractères.

Voici ma déclaration initiale (avant d'y avoir touché avec ton code) de GetPrivateProfileString, en sachant que j'ai changé "As Any" sous visual studio 6.0 pour "As Object" sous Visual studio 2008 :

1. Public Declare Function GetPrivateProfileString Lib "kernel32"
2. Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String,
3. ByVal lpKeyName As Object,
4. ByVal lpDefault As String,
5. ByVal lpReturnedString As String,
6. ByVal nSize As Integer,
7. ByVal lpFileName As String) As Integer


Les différences avec ton code :
1. ... Lib "kernel32.dll"
3. lpKeyName As String,
5. lpReturnedBuffer As IntPtr,

J'ai lancé l'appli, elle me demande si je veux vider un des répertoires à initialiser, je clique sur OK, et ensuite l'initialisation a eu l'air de fonctionner puisque plus de msg d'erreur n'apparaît plus. Donc oui ça a l'air de marcher :P

Merci encore,
Cordialement,
Ginger
Messages postés
69
Date d'inscription
jeudi 8 janvier 2009
Statut
Membre
Dernière intervention
3 septembre 2010

PS : Je comprends mieux pour l'API, je ne voyais juste pas le rapport mais maintenant c'est bon merci ! =)