Numéro d'article: 241896 - Dernière mise à jour: mercredi 13 juin 2007 - Version: 5.1 Problèmes de thread avec les composants ActiveX Visual Basic 6.0
SommaireSymptômes
Lorsque vous utilisez des composants ActiveX Visual Basic 6.0 dans un environnement multithread, vous devez avoir connaissance des problèmes suivants susceptibles de se produire :
DLL ActiveX hébergée dans un client multithread
Remarque Avant le Service Pack 3 de Visual Studio 6.0, il était possible d'obtenir un AV pendant l'arrêt de processus alors que l'option Conservé en mémoire était activée. Ce bogue a été corrigé dans le dernier Service Pack de Visual Studio 6.0 (en anglais) : http://msdn2.microsoft.com/fr-fr/vstudio/aa718364.aspx
(http://msdn2.microsoft.com/fr-fr/vstudio/aa718364.aspx)
Si une DLL ActiveX ou le projet UserControl contient des déclarations d'API, vous pouvez rencontrer des blocages pendant l'arrêt du processus/thread ou la création d'objet, même si la case à cocher Mode d'exécution autonome a été activée dans le cas d'une DLL ActiveX. Pour contourner ce problème, vous pouvez utiliser une Bibliothèque de types au lieu d'une instruction Declare dans Visual Basic. Pour plus d'informations sur la façon d'utiliser une Bibliothèque de types, cliquez sur le numéro%2 ci-dessous pour afficher l'article%2 correspondant dans la Base de connaissances Microsoft. 189133
(http://support.microsoft.com/kb/189133/EN-US/
)
COMMENT FAIRE : Rendre la DLL C plus accessible à VB avec une Bibliothèque de types
ActiveX EXE accédé par un client multithread ou par plusieurs clients à un seul thread ou multithread
Erreur d'exécution '7' : mémoire insuffisante et parfois suivie d'une erreur d'opération sur disque.
Erreur d'exécution '430' : la classe ne gère pas Automation ou l'interface attendue.
Erreur d'exécution '424' : objet requis.
Erreur d'exécution '-2147023170 (800706be)' : erreur Automation. Échec de l'appel de procédure distante.
Erreur d'exécution '-2147287010 (8003001e)' : erreur Automation. Il s'agit d'un message « Une erreur disque s'est produite lors d'une opération de lecture. » basé sur ErrLook.
Des processus serveur supplémentaires (ThreadTest.EXE) sont créés même si la propriété Instancing de Class1 est marquée MultiUse.
Statut
Ce comportement est voulu par la conception même du produit.Dans Visual Studio 6 Service Pack 5, si un projet contient une classe publique dont l'option MTSTransactionMode est définie par une valeur autre que 0, les options Mode d'exécution autonome et Conservé en mémoire sont automatiquement sélectionnées. Plus d'informationsProcédure pour reproduire le problèmeA : Création du serveur
B : Création du client et test
C: Mise en ?uvre de la solution de contournement
N'utilisez pas la propriété GlobalMultiUse Instancing pour une classe lorsque vous projetez d'utiliser le composant ActiveX sous MTS ou COM+. L'interface de l'objet GlobalMultiUse est mise en cache dans une table par thread et n'est pas libérée avant la fin du thread. En conséquence, si un appel entre avec un contexte différent (bien que situé sur le même thread), il échoue avec RPC_E_WRONG_THREAD. Pour utiliser des composants dans MTS et COM+, vous devez concevoir vos classes de telle sorte que les objets soient sans état. Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT. | Autres ressources Autres sites d'aide
CommunautésObtenir de l'aideTraductions disponibles
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email
Retour au début
