none
Client OPC DA sous Borland c++ & c++ Builder RRS feed

  • Discussion générale

  • Je code un logiciel sous Borland C++ qui utilise une DLL créé sous C++ Builder. Cette DLL permet d'utiliser les fonctions OPC sous Borland. Logiciel : Simulateur de partie opérative automate

    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.

    Problème : Libération de la mémoire utilisée par les items.

    Extrait de la fonction libérer item :

    OPCITEMRESULT *pItemResults = (OPCITEMRESULT*) pItemResultTabs ;

    CoTaskMemFree(pItemResultTabs);

    pItemResultTabs  = NULL ;

    La ligne CotaskMemFree fait planter l’application.

    On ne peut la supprimer car si on ne libère pas les items la mémoire va se remplir puis l'application va crasher.

    De plus nous avons essayé un : CoTaskMemFree(pItemResultTabs[n].pBlop), mais sans résultat.

    J'ai vu sur le forum https://social.msdn.microsoft.com/Forums/en-US/012e5cc7-0596-4987-8b7a-ff6d15426b6e/comnet-memory-corruption-interop?forum=vcmfcatl   , Toute mémoire que vous devez allouer à des fins de marshaling entre les limites de processus doit être allouée à l'aide de CoTaskMemAlloc (). Vous ne pouvez pas utiliser new / delete.

    J'en avais déja discuté avec la personne qui a suivi cette DLL , on m'a répondu qu'il n'y avait pas besoin d'utiliser de CoTaskMenAlloc.

    Si quelqu'un a une piste je suis preneur.

    mardi 5 mars 2019 13:00