[Delphi 7 DLL] Changement sauvage d’ID de Thread en cours d’exécution !

Lundi 16 avril 2007

Contexte :

J’ai une DLL win32 multithread écrite en Delphi 7.

Elle est appelée par une application ASP.NET 1.1 (Delphi 2006)

Tout va bien quand l’application ASP.NET tourne hors debugger, mais les fonctions de la DLL plantent ou terminent sur erreur de manière aléatoire quand l’application ASP.NET tourne dans l’environnement Delphi 2006 !

Cause :

En analysant les sorties sur DebugView, je me suis rendu compte que quand l’application ASP.NET tourne sous debugger, il arrive que l’ID du thread change subitement pendant l’exécution d’une fonction de la DLL ce qui provoque rapidement une erreur.

En fait, il semble que sous ce debugger, l’ID de thread de l’application peut changer à tout instant.

La DLL win32 utilisait la fonction GetCurrentThreadID() de l’API windows pour accéder à ses ressources nommées en considérant que l’id ne changeait pas au cours de l’exécution d’un appel d’une fonction de la DLL win32.
Ce qui est faux dans certains contextes (sous debugger dans notre cas).

Solution :

Mémoriser l’ID du Thread dans une variable de thread (ThreadVar sous Delphi) et l’utiliser ensuite au lieu de faire appel à la fonction GetCurrentThreadID().

Exemple de code (incomplet) :

Vos commentaires

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Se connecter

Votre adresse email ne sera pas rendue publique sur le site. Seuls les commentaires sont publiés sur le site. Votre adresse mail est nécessaire pour que nous puissions vous répondre si vous avez une question personnelle.

Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Suivre les commentaires : RSS 2.0 | Atom