Tentative de lecture ou d'écriture de mémoire protégée !![OPC] [Résolu]

Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Dernière intervention
8 juin 2012
- - Dernière réponse :  Utilisateur anonyme - 9 juin 2012 à 12:28
Bonjour, j'ai créer une application de supervision en vb2010 qui travaille avec le serveur opc,Donc quand je dé-bug l'application tous marche nickel, j'arrive a me connecté au serveur créer les groupes, les items ,lire et écrire des valeurs..., Le problème c'est quand j'ai installer l'application sur le même poste elle et génère le fameux erreur "Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée" elle s'arrête sur la ligne
 
For i = 1 To NbItemMesure
                AnOfsItemCollection.AddItem(ItemNameMesure(i), HandleClientMesure(i))
            Next

Pour info j'utilise la DLL SA OPC AUTOMATION2, j'ai vérifié la déclaration des variables aucun soucis.
si quelqu'un a une idée sur l'erreur s'il vous plait et merci d'avance.
Afficher la suite 

Votre réponse

20/28 réponses

Meilleure réponse
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Dernière intervention
8 juin 2012
3
Merci
salut tout le monde !

Comme j'ai remarqué que pour résoudre tous ces probléme il faut minimum deux jours, donc je me suis orienté vers une nouvelle fonction( ça abouti).
j'ai régler ça on changons la fonction AddItem en AddItems,c'était ce que j'ai utilisé au début mais j'avais des exception levée, j'ai réussi a régler ça comme il est montrer dans le code en bas.
la différence entre les deux c'est que AddItems crée les items en une seule fois sans avoir besoin de faire une boucle,(d'ailleurs je ne sais pas pourquoi AddItem n'a pas fonctionné mais l'important c'est que l'app marche).
et pour les gens intéresser par OPC en VB.Net !j'ai mit un petit exemple de de la déclaration des paramètres de la fonction AddItems parce que c'est pas si évident que ça
 Private ItemNameMesure() As String 
    Private HandleClientMesure() As Integer 
    Private HandleServerMesure As array
    Private ErreurMesure As array
    Const NbItemMesure As Integer = 17 

AnOfsItemCollection.AddItems(NbItemMesure, ItemNameMesure, HandleClientMesure, HandleServerMesure, ErreurMesure)

Merci neon90 3

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

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de neon90
0
Merci
Bonjour,

Pourquoi la même question 2 fois en 6 heures ?

Cela n'ira pas plus vite et cela va obliger les gens à voir les 2 questions pour savoir où tu en es rendu.

P.S. Doublon avec : ceci.
Commenter la réponse de Utilisateur anonyme
0
Merci
Bonjour,

Il y a trop peu d'information pour pouvoir en tirer une conclusion.
De quel type est l'objet AnOfsItemCollection ?
De quels types sont les paramètres attendus de la méthode AddItem ?
Les paramètres de compilation de ton projet ?
DLL compatible avec l'environnement ?
etc...
Commenter la réponse de Utilisateur anonyme
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Dernière intervention
8 juin 2012
0
Merci
SLt cmarcotte c'est parce que j'ai trouvé que le premier titre fait un peu peur au gens .

Slt banana32 alors AnOfsItemCollection est de type SAOPCAutomation.OPCItems
Les paramètres attendus de AddItem : AddItem( string , Integer )
pour ta troisième question je ne sais de quelle paramètres tu parle !!
et pour le DLL j'ai du doute a propos de ça aussi, car j'ai essayé l'application sous windows7 et elle marche sans aucun soucis.
je serait la pour plus d'infos et merci pour ta réponse quand même..
Commenter la réponse de neon90
0
Merci
et pour le DLL j'ai du doute a propos de ça aussi, car j'ai essayé l'application sous windows7 et elle marche sans aucun soucis.

C'est pour cela que j'ai posé la question. Renseigne toi sur le ou les environnements supportés par cette dll ainsi que les architectures 32/64 bits.
A+
Commenter la réponse de Utilisateur anonyme
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Dernière intervention
8 juin 2012
0
Merci
Oui c'est prévue mais ce qui me paraître bizarre, le faite que d'autre fonction de la même DLL fonctionne, et pour l'architecture non j'en suis sur que ça supporte 32 bits !!
Commenter la réponse de neon90
0
Merci
As-tu activé Option Strict et Option Explicit dans les propriétés du projet ?
Y a t-il du code non managé à gérer ?
Commenter la réponse de Utilisateur anonyme
0
Merci
Il y est dit notament :
Pour les appels de code non managé, affectez au paramètre le type IntPtr au lieu du type String.
Commenter la réponse de Utilisateur anonyme
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Dernière intervention
8 juin 2012
0
Merci
Non l'option Strict est désactivé et l'option Explicit est activé !
non y'a pas de code non managé a gérer , mais j'ai un peu du mal comme même a vérifier ça donc est ce que tu peux juste me dire stp ce que ça peux invoquer !!
Commenter la réponse de neon90
0
Merci
Je t'ai donné un lien qui contient toutes les informations nécéssaires. N'hésite pas à cliquer sur les liens de la rubrique 'voir aussi' au bas de la page.
Active Option Strict et corrige les erreurs s'il y en a.
Commenter la réponse de Utilisateur anonyme
Commenter la réponse de Utilisateur anonyme
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Dernière intervention
8 juin 2012
0
Merci
ok merci je vais essayé ça sur mon poste XP demain au travaille, chez moi j'ai windows7. et je te tient au courant de mon avancement
Commenter la réponse de neon90
0
Merci
A tous les coups, ceci est faux : AddItem( string , Integer )
Bonne chance
Commenter la réponse de Utilisateur anonyme
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Dernière intervention
8 juin 2012
0
Merci
Comment ça c'est faux, non du tout !!

image !
Commenter la réponse de neon90
0
Merci
Ce que tu montres est le reflet de ce qui est déclaré. Or, ce qui est déclaré ne l'est pas forcément fait correctement
Commenter la réponse de Utilisateur anonyme
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Dernière intervention
8 juin 2012
0
Merci
ah non si je t'assure il n'y a aucun doute sur ça ! voila mes déclarations
 
   
    Private ItemNameMesure() As String 'Tableau de Définition des items
    Private HandleClientMesure() As Integer 'Tableau de pointeurs des items
    Private HandleServerMesure() As Integer 'Tableau de pointeurs des items 
    Private ErreurMesure() As Integer 'Tableau de codes d'erreur rendus par 
    Const NbItemMesure As Integer = 17 'Nombre d'item à gérer pour le mesure

et si tu parle des argument de la fonction AddItem elle méme regarde aussi ça
image !
Commenter la réponse de neon90
0
Merci
Effectivement.
Je laisse la place à quelqu'un de plus compétant que moi
Commenter la réponse de Utilisateur anonyme
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Dernière intervention
8 juin 2012
0
Merci
merci quand même !
@+
Commenter la réponse de neon90
0
Merci
Juste une dernière chose :
Comment est dimmensionné ItemNameMesure() dans ton code ?
Const NbItemMesure As Integer = 17

et
For i = 1 To NbItemMesure
Pourquoi ne pars tu pas de i = 0 ?
N'y a-t-il pas un dépassement de tableau ?
Commenter la réponse de Utilisateur anonyme
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Dernière intervention
8 juin 2012
0
Merci
Bjr, ItemNameMesure() est dimensionné de cette façon
 ItemNameMesure(1) = "deg1!Température_sup_l"
            HandleClientMesure(1) = 1
            ItemNameMesure(2) = "souss10!Concentration_etage1"
            HandleClientMesure(2) = 2
            ItemNameMesure(3) = "deg2!Température_sup_l"
            HandleClientMesure(3) = 3
            ItemNameMesure(4) = "souss10!Concentration_etage2"
            HandleClientMesure(4) = 4
            ItemNameMesure(5) = "deg3!Température_sup_l"
            HandleClientMesure(5) = 5
            ItemNameMesure(6) = "souss10!Concentration_etage3"
            HandleClientMesure(6) = 6
            ItemNameMesure(7) = "souss10!Resistivite_etage5"
            HandleClientMesure(7) = 7
            ItemNameMesure(8) = "souss10!Rh_etage6"
            HandleClientMesure(8) = 8
            ItemNameMesure(9) = "souss10!Conductivite_etage8"
            HandleClientMesure(9) = 9
            ItemNameMesure(10) = "souss10!Temperature_etage6"
            HandleClientMesure(10) = 10
            ItemNameMesure(11) = "etuve9!Bruleur2_temperature"
            HandleClientMesure(11) = 11
            ItemNameMesure(12) = "etuve9!Bruleur1_temperature"
            HandleClientMesure(12) = 12
            ItemNameMesure(13) = "etuve9!Temperature1"
            HandleClientMesure(13) = 13
            ItemNameMesure(14) = "etuve9!Temperature2"
            HandleClientMesure(14) = 14
            ItemNameMesure(15) = "etuve9!Temperature3"
            HandleClientMesure(15) = 15
            ItemNameMesure(16) = "etuve9!Temperature4"
            HandleClientMesure(16) = 16
            ItemNameMesure(17) = "etuve9!Temperature5"
            HandleClientMesure(17) = 17

et le fait de partir de 1 c'est un choix, et je pense pas que ça soit ça, car la fonction AddItem est appelé juste pour les valeurs de 1 a 17 ! il pourait pas avoir un dépassement de tableau.(mais je regarderait quand même)
Commenter la réponse de neon90

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.