Nous n'avons qu'une seule information : Une violation d'accès en écriture dans une version release lancée sans débug
Pour c'est ça un vieil ordinateur
On parle d'un vieux programme D7, j'ai pensé donc à la technologique de l'époque soit donc des PIV HT pouvant faire tourner deux threads en vrai simultané et non via un ordonnancement tour à tour.
Et "Depuis douze ans", j'admets ça pouvait plutôt être de "Core 2 Quad Core" donc dans l'ère du multi-threading optimisé mais votre problème de VA qui ne se produit pas en DEBUG faisait tellement pensé à un problème de collisions entre thread
Je n'avais pas effectivement compris que les vieux ordinateurs étant des "64 bits avec des cores I7 de 4ème génération" et le nouveau un "7ème génération"
Et que le mien est aussi un i7 de 4ème génération, mon pauvre vieil ordinateur que j'ai a peine depuis 3 ans ... dire qu'il est un veillard comme ma tour qui a justement un "Core 2 Quad Core" et au mieux un D7 Perso dessus (je ne sais même pas si elle démarre si je la branche)
Et dire que l'on a des serveurs encore plus vieux au bureau
Je remarque surtout que l'on obtient pas de vous les réponses à nos questions
nous avons un début, le prototype de fonction
On ne sait ni ce que contient pTjeu ni ptconv
Code : Sélectionner tout - Visualiser dans une fenêtre à part procedure wb_dll(H:pTjeu;C:ptconv;I_eval:integer);stdcall; external 'wbtot_wb.dll';
La mémoire si elle correctement allouée, avec le bon alignement, soit en packed explicite dans le code de déclaration, en directive de compilation sur l'unité ou même dans les options de projet
Par habitude, je ne fais jamais de external, préférant un LoadLibrary et GetProcAdress que pour mon programme soit robuste à l'erreur en cas de DLL manquante ou ne pouvant pas se lancer.
La mémoire si bien allouée n'est elle pas libérée trop tôt ou modifiée à un mauvais moment, la DLL pouvant ne pas apprécier que l'on joue avec la mémoire des pointeurs que lui a fourni, tout cela nous ne le savons pas, nous ne pouvons que vous donner des pistes, nous n'avons le code sous les yeux pour comprendre les évidences qui ne le sont qu'à vos yeux.
Quels résultats ?
On voit une procédure, il y a une autre fonction ? un pointeur d'entrée et l'autre de sortie ? un fichier ?
Mystère !
On ne voit que les entrées avec les données de requêtes pTjeu, les conventions ptconv et l'indice I_eval pour le numéro d'opération
Aucun résultat à l'horizon, on ignore si c'est un appel bloquant ou asynchrone utilisant un CallBack par exemple
N'avoir aucune modification pour passer de D7 à D10.2 sans impact de l'Unicode, cela relève du miracle, je n'accorde aucun crédit à ce test si aucunes mesures sur la manipulation string<>PChar n'ont été prises
Peut-être un problème de lancement en mode administrateur
Nous ne savons pas si le programme est simple Exe ou un Service Windows quoi que ceci m'indique donc un accès au bureau puisqu'il y a une fenêtre
Combien de fois, j'ai pu voir un affichage parasiter tout un programme serveur ... rien que le ralentissant, ça réduisait les conflits.
Ce n'est pas de notre faute si vous ne répondez à nos questions !
Une violation d'accès peut venir de raison totalement imprévisible
Par exemple, il y a un tableau, le programme écrit dedans mais il déborde sur l'espace mémoire suivant, pas de bol, en mémoire c'était l'emplacement d'un pointeur
Et à un moment, le programme va écrire dans l'emplacement mémoire indiqué par ce pointeur mais dont la valeur a été corrompue
Résultat, un bug à un endroit X provoque une violation d'un code Y
Partager