Étant donné le code suivant, la méthode ReleaseCOMObj() publiera-t-elle l'objet COM d'origine ou le créera-t-il implicitement et le relâchera-t-il?Puis-je créer une méthode généralisée pour libérer des objets COM?
private void TestRelease()
{
Excel.Workbook workbook = excel.ActiveWorkbook;
// do stuff
ReleaseComObj(workbook);
}
private static void ReleaseComObj(Object obj)
{
if (obj != null)
{
Marshal.ReleaseComObject(obj);
obj = null;
}
}
Mise à jour: méthode modifiée à l'électricité statique. Voir Passing COM objects as parameters in C# pour une explication sur la raison pour laquelle le paramètre Object ne peut pas être ref Object obj
.
Cela fonctionne rarement dans la pratique. Faites un peu d'interopérabilité non-trivial sur le classeur et vous créerez beaucoup de nombre de références cachées supplémentaires. Faites confiance au garbage collector. –