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

[Résolu]
Signaler
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Statut
Membre
Dernière intervention
8 juin 2012
-
 Utilisateur anonyme -
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.
A voir également:

28 réponses

Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Statut
Membre
Dernière intervention
8 juin 2012

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)

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.

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...
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Statut
Membre
Dernière intervention
8 juin 2012

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..

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+
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Statut
Membre
Dernière intervention
8 juin 2012

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 !!

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 ?

Il y est dit notament :
Pour les appels de code non managé, affectez au paramètre le type IntPtr au lieu du type String.
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Statut
Membre
Dernière intervention
8 juin 2012

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 !!

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.

Tu devrais aussi lire cet article
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Statut
Membre
Dernière intervention
8 juin 2012

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

A tous les coups, ceci est faux : AddItem( string , Integer )
Bonne chance
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Statut
Membre
Dernière intervention
8 juin 2012

Comment ça c'est faux, non du tout !!

image !

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
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Statut
Membre
Dernière intervention
8 juin 2012

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 !

Effectivement.
Je laisse la place à quelqu'un de plus compétant que moi
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Statut
Membre
Dernière intervention
8 juin 2012

merci quand même !
@+

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 ?
Messages postés
13
Date d'inscription
mercredi 2 mai 2012
Statut
Membre
Dernière intervention
8 juin 2012

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)