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

cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 10 févr. 2009 à 17:57 - Dernière réponse : cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention
- 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
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 12 févr. 2009 à 12:29
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de Polack77
NoNeed2Know 11 Messages postés lundi 9 février 2009Date d'inscription 4 juillet 2009 Dernière intervention - 11 févr. 2009 à 03:51
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 11 févr. 2009 à 07:37
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
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 12 févr. 2009 à 10:16
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
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 12 févr. 2009 à 12:33
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
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 12 févr. 2009 à 14:50
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
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 12 févr. 2009 à 14:51
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.