Sous VB2008 : problème AccessViolationException...

Résolu
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:57
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 à 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

7 réponses

Polack77 Messages postés 1095 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
12 févr. 2009 à 12:29
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
3
NoNeed2Know Messages postés 11 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 4 juillet 2009
11 févr. 2009 à 03:51
Si le message d'erreur est réellement une erreur, essai avec des balises "Try...End Try"
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 févr. 2009 à 07:37
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 
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 à 10:16
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
0

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

Posez votre question
Polack77 Messages postés 1095 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
12 févr. 2009 à 12:33
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
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 à 14:50
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
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 à 14:51
PS : Je comprends mieux pour l'API, je ne voyais juste pas le rapport mais maintenant c'est bon merci ! =)
0
Rejoignez-nous