2010-06-18 4 views
3

Sur .NET Rocks! Show 561, Carl et Richard ont parlé de libérer des objets non gérés instanciés dans du code managé. Si vous devez libérer un objet COM qui est instancié dans le code managé .NET, vous devez appeler System.Runtime.InteropServices.Marshall.ReleaseComObject. Existe-t-il quelque chose de similaire que vous devez faire (ou devriez faire) lors de la publication d'objets .NET à partir du code COM, ou est-ce suffisant de s'appuyer sur le Garbage Collector pour libérer les objets?Publication d'objets .NET à partir du code VB6

Répondre

4

Tant que vous gérez le nombre de ref du COM Callable Wrapper comme vous le faites pour n'importe quel autre objet COM (set netObj = Nothing) COM et .NET se chargeront du reste.

+1

+1. Je mentionnerai simplement que vous n'avez souvent pas besoin de faire quoi que ce soit. Si 'netObj' est une variable locale, le runtime VB6 le relâchera immédiatement à la fin de la routine. Vous avez seulement besoin de 'Set netObj = Nothing' si' netObj' est une variable de niveau module ou globale. – MarkJ

3

Je voudrais également ajouter que si vous utilisez des événements de VB6, vous voudrez ajouter une fonction dans votre code DotNet pour libérer l'événement. .: par exemple

class SomeEventClass 
{ 
    public event EventHandler SomeEvent; 

    public void DoSomething() 
    { 
     var someEvent = SomeEvent; 
     if (someEvent != null) 
     { 
      someEvent(this, new EventHandlerArgs()); 
     } 
    } 

    public void ReleaseFromEvents() 
    { 
     SomeEvent = null; 
    } 

} 

Cela est nécessaire car parfois l'événement ne sera pas autorisé à null lorsque l'objet VB6 est détruit. Quelque chose a appris à la dure ...

Questions connexes