IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Client OPC DA sous Borland c++ & c++ Builder


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Client OPC DA sous Borland c++ & c++ Builder
    Bonjour,

    je code un logiciel sous Borland C++ qui utilise une DLL OPC créé sous C++ Builder.

    Cette DLL est permet d'utiliser les fonctions sous Borland.

    Logiciel : Simulateur de partie opérative automate

    Les étapes du client OPC sont les suivantes:

    Intégration d'instance de l'interface IOPCSERVER
    Ajout d'un groupe au serveur OPC
    Ajout d'items OPC
    Lecture valeurs des items
    Suppression des items
    Suppression du groupe
    Libération des références interfaces
    Fermeture de la bibliothèque COM
    Mon problème se trouve sur la suppression des items lors de la libération de la mémoire.

    J'utilise seulement une ligne de code avec la fonction CotaskMemFree(...).

    Lors de l'arret de la simulation, l'application crash et se ferme directement.

    Lorsque je met cette ligne en commentaire, je n'ai pas de problèmes lors de l’arrêt de la simulation, sauf que la mémoire va se remplir jusqu’à saturation et plantage de l'application...

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 273
    Points : 628
    Points
    628
    Par défaut
    Bonjour,

    Quelle version de Builder utilisez vous ? Sur quel système ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Réponse
    Bonjour,

    Voici les logiciels que j'utilise:
    • Borland 4.53 pour le noyau de l’application et les fonctionnalités de base
    • Borland 5.02 pour la création de pupitres et synoptiques
    • C++ Builder 4 pour la création de DLL
    • InnoSetup pour générer le package.


    Je code sous Windows XP et test sous XP ou Windows 10;


    L'application de simulateur de partie opérative conversationnel tourne sur Windows 3.1,NT,XP, ect .. puis elle a été adapté sur Windows 7 et 10 mais ce problème persiste sur tout les systèmes.Nous utilisons actuellement notre application sous Windows 10.


    Rappel DLL créé sous C++ Builder 4 qui est utilisé dans du code Borland 4.5.
    Problème : Libération de la mémoire utilisé par les items.

    Extrait du code de C++ Builder 4 :

    « Libération de la mémoire utilisé par les items issus de Additems »
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    OPCITEMRESULT *pItemResults = (OPCITEMRESULT*) pItemResultTabs ;
    CoTaskMemFree(pItemResultTabs);
    pItemResultTabs  = NULL ;
    De plus nous avons essayé un : CoTaskMemFree(pItemResultTabs[n].pBlop), mais sans résultat

    Cordialement,

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 273
    Points : 628
    Points
    628
    Par défaut
    My God ! C'est du néolithique !
    Avec des outils qui ont plus de 20 ans pas étonnant que vous ayez des soucis.
    Il faudrait déjà laisser tomber XP pour Windows 10 et télécharger la dernière version de Builder (gratuite) :
    https://www.embarcadero.com/fr/produ...uilder/starter
    L'ancien compilateur Borland est encore fourni mais assez fortement déconseillé maintenant, utilisez les compilateurs CLang beaucoup plus performants (32 et 64 bits sous Windows).
    Pour le reste j'ai touché à l'automatisme dans mon jeune temps mais c'est loin...
    Tenez moi quand même au courant.

  5. #5
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut,
    ce probleme semble être connu chez Microsoft voir article suivant:https://www.google.com/url?sa=t&rct=...HkxeGP0jR5BAjf
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Réponse
    Merci pour l’article, il y a un problème de fuite de mémoire a se que je comprend.

    En cherchant sur divers forum je tombe sur du code utilisant du CoTaskMemAlloc avec du CotaskMemFree
    et d'autre code n’utilisant que du CotaskMemFree (https://lhcb-online.web.cern.ch/lhcb...pleClient.html)

    J'en ai déjà parlé a la collègue qui s'occupé de ce projet et elle m'avait répondu qu'il n'y avait pas besoin de faire dans notre cas de CoTaskMemAlloc ou CoTaskMemRealloc ...

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello,

    Est-ce que tu as bien des CoTaskMemFree à chaque étape ?
    Par exemple après ->Read(OPCDATASOURCE dwSource, DWORD dwCount, OPCHANDLE *phServer, OPCITEMSTATE **ppItemValues, HRESULT **ppErrors), CoTaskMemFree sur ppItemValues et sur ppErrors, etc etc.

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Réponse
    Bonjour,
    Oui dans chaque méthode j'ai un CoTaskMemFree.
    Exemple pour la méthode Read : pItemsvalues et pErrors ect .. => Oui


    Citation Envoyé par totoche76 Voir le message
    Hello,

    Est-ce que tu as bien des CoTaskMemFree à chaque étape ?
    Par exemple après ->Read(OPCDATASOURCE dwSource, DWORD dwCount, OPCHANDLE *phServer, OPCITEMSTATE **ppItemValues, HRESULT **ppErrors), CoTaskMemFree sur ppItemValues et sur ppErrors, etc etc.

Discussions similaires

  1. Client OPC sous VB
    Par boumboum dans le forum Automation
    Réponses: 2
    Dernier message: 20/12/2013, 10h54
  2. [Outils][VB.NET/C#] Comment créer un client OPC ?
    Par Angath dans le forum EDI/Outils
    Réponses: 4
    Dernier message: 07/10/2005, 16h41
  3. Réponses: 1
    Dernier message: 10/12/2004, 10h50
  4. Problème avec GLUT sous borland c++ builder X
    Par hiko-seijuro dans le forum GLUT
    Réponses: 1
    Dernier message: 04/11/2004, 12h47
  5. Afficher du texte en couleur sous Borland C++ 4.02
    Par Cthulhu 22 dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 18/11/2003, 00h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo