Question

Est-il possible d'augmenter le nombre de références de RCW sur une interface inconnue? (À savoir pas le compte de référence sur l'objet COM sous-jacent)

J'ai un vieux code serveur COM

int Method1(object comobject) {
    try {
        // do something with comobject
        return 0;
    }
    finally {
        Marshal.ReleaseComObject(comobject);
    }
 }

Ce code fonctionne très bien, mais maintenant je dois l'appeler d'une autre méthode.

int Method2(object comobject) {
    int result = Method1(comobject);
    // Do something with combject
}

Le type de comobject varie (qui est pourquoi il est l'objet)

Était-ce utile?

La solution

Il y a la méthode Marshal.AddRef (), mauvais changement de comptage de référence bien. Je suis assez sûr que incrémenter le nombre de RCW est pas possible directement. Dig-vous sortir du trou profond que vous êtes et fixer l'ancien code.

Autres conseils

est une certaine manière, les comptes de comptage de RCW combien de fois l'objet a été marshalées vous pouvez augmenter ce nombre en effectuant un maréchal supplémentaire.

public static T AddRcwRef<T>(T t) 
{
    IntPtr ptr = Marshal.GetIUnknownForObject(t);
    try {
        return (T)Marshal.GetObjectForIUnknown(ptr);
    }
    finally {
         Marshal.Release(ptr); // done with the IntPtr
    }
}

Je ne suis pas sûr que je vous recommande d'utiliser cette méthode, il est probablement préférable d'essayer de se débarrasser de vos appels ReleaseComObject.

Pour en savoir plus, voir cette blog sur le sujet je l'ai écrit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top