Sous VB2008 : problème AccessViolationException... [Résolu]

Messages postés
69
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
3 septembre 2010
- - Dernière réponse : cs_ginger4957
Messages postés
69
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
3 septembre 2010
- 12 févr. 2009 à 14:51
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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
3
Merci
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

Merci Polack77 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Polack77
Messages postés
11
Date d'inscription
lundi 9 février 2009
Dernière intervention
4 juillet 2009
0
Merci
Si le message d'erreur est réellement une erreur, essai avec des balises "Try...End Try"
Commenter la réponse de NoNeed2Know
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
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 
Commenter la réponse de PCPT
Messages postés
69
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
3 septembre 2010
0
Merci
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
Commenter la réponse de cs_ginger4957
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
0
Merci
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
Commenter la réponse de Polack77
Messages postés
69
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
3 septembre 2010
0
Merci
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
Commenter la réponse de cs_ginger4957
Messages postés
69
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
3 septembre 2010
0
Merci
PS : Je comprends mieux pour l'API, je ne voyais juste pas le rapport mais maintenant c'est bon merci ! =)
Commenter la réponse de cs_ginger4957

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.