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)
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.