Marshal.ReleaseComObject(Object) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Décrémente le nombre de références du wrapper pouvant être appelé au runtime (RCW) associé à l’objet COM spécifié.
public:
static int ReleaseComObject(System::Object ^ o);
[System.Security.SecurityCritical]
public static int ReleaseComObject(object o);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static int ReleaseComObject(object o);
public static int ReleaseComObject(object o);
[<System.Security.SecurityCritical>]
static member ReleaseComObject : obj -> int
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member ReleaseComObject : obj -> int
static member ReleaseComObject : obj -> int
Public Shared Function ReleaseComObject (o As Object) As Integer
Paramètres
- o
- Object
Objet COM à libérer.
Retours
Nouvelle valeur du nombre de références du RCW associé à o. Cette valeur est généralement zéro, car le RCW conserve une seule référence à l’objet COM encapsulé, quel que soit le nombre de clients gérés qui l’appellent.
- Attributs
Exceptions
o n’est pas un objet COM valide.
o a la valeur null.
Remarques
Cette méthode est utilisée pour contrôler explicitement la durée de vie d’un objet COM utilisé à partir du code managé. Vous devez utiliser cette méthode pour libérer l’objet COM sous-jacent qui contient des références aux ressources en temps voulu ou lorsque les objets doivent être libérés dans un ordre spécifique.
Chaque fois qu’un pointeur d’interface COM entre dans le Common Language Runtime (CLR), il est encapsulé dans un RCW.
Le RCW a un nombre de références incrémenté chaque fois qu’un pointeur d’interface COM est mappé à celui-ci. La ReleaseComObject méthode décrémente le nombre de références d’un RCW. Lorsque le nombre de références atteint zéro, le runtime libère toutes ses références sur l’objet COM non managé et lève une System.NullReferenceException valeur si vous tentez d’utiliser l’objet plus loin. Si la même interface COM est passée plusieurs fois d’un code managé à un code managé, le nombre de références sur le wrapper est incrémenté chaque fois et l’appel ReleaseComObject retourne le nombre de références restantes.
Cette méthode vous permet de forcer une version de nombre de références RCW afin qu’elle se produise précisément lorsque vous le souhaitez. Toutefois, une utilisation incorrecte peut entraîner l’échec de ReleaseComObject votre application ou provoquer une violation d’accès.
Considérez un scénario dans lequel le code managé d’un domaine d’application tient sur un RCW qui représente un composant COM. Si vous appelez la ReleaseComObject méthode sur rcW, le code managé ne pourra pas accéder à RCW et déclenchera une InvalidComObjectException exception.
Une erreur plus grave peut se produire si un appel au RCW est en cours d’exécution lors de la publication du RCW. Dans ce cas, il est possible que le thread qui effectue l’appel provoque une violation d’accès. Toutefois, la mémoire du processus peut devenir endommagée et le processus peut continuer à s’exécuter jusqu’à ce qu’il échoue pour des raisons très difficiles à déboguer.
Ce risque est composé lorsque le composant COM utilisé est un singleton, pour la raison suivante : le CLR active les composants COM en appelant la fonction COM CoCreateInstance , qui retourne le même pointeur d’interface chaque fois qu’il est appelé pour les composants COM singleton. Par conséquent, des parties distinctes et indépendantes du code managé dans un domaine d’application peuvent utiliser le même RCW pour un composant COM singleton, et si l’une ou l’autre appelle la ReleaseComObject méthode sur le composant COM, l’autre sera rompue.
Par conséquent, utilisez le ReleaseComObject seul s’il est absolument nécessaire. Si vous souhaitez appeler cette méthode pour vous assurer qu’un composant COM est publié à un moment déterminé, envisagez d’utiliser la méthode à la FinalReleaseComObject place. FinalReleaseComObject libère le composant COM sous-jacent, quel que soit le nombre de fois qu’il est entré à nouveau dans le CLR. Le nombre de références internes du RCW est incrémenté d’un à chaque fois que le composant COM entre à nouveau le CLR. Par conséquent, vous pouvez appeler la ReleaseComObject méthode dans une boucle jusqu’à ce que la valeur retournée soit égale à zéro. Cela obtient le même résultat que la FinalReleaseComObject méthode.