M
Matthias Pieroth
Hallo NG,
ich habe mal eine Frage zum IDisposable-Pattern und COM. Wir haben eine
MFC-Anwendung in die wir .NET integrieren (COM Interop, .NET 1.1). Es gibt
eine API in COM, von der wir aus der TypeLib den .NET Wrapper (RCW)
generieren. In .NET kapseln wir die RCW-Objekte an einigen Stellen in
..NET-Klassen, das heißt Klassen aus der Interop-Schicht sind member von
reinen .NET-Klassen. Beispiel:
class MyObject : IDisposable
{
private IMyCOMObject _myCOMObject;
public MyObject()
{
_myCOMObject = new MyCOMObject();
}
public int MyMethod()
{
// eigene Logik auf _myCOMObject
return _myCOMObject.MyMethod();
}
public void Dispose()
{
Marshal.ReleaseComObject( _myCOMObject );
}
}
Nun die Frage: Muss ich das Dispose selbst aufrufen oder macht das .NET für
mich? Wir haben nämlich das Problem dass die Applikation (MFC exe) im
Speicher bleibt, also COM-seitig AddRefs zuviel ausgeführt wurden.
Hat jemand da Ahnung, ein Pattern oder wie geht man da auf sicherem Wege
vor?
Gruß,
ich habe mal eine Frage zum IDisposable-Pattern und COM. Wir haben eine
MFC-Anwendung in die wir .NET integrieren (COM Interop, .NET 1.1). Es gibt
eine API in COM, von der wir aus der TypeLib den .NET Wrapper (RCW)
generieren. In .NET kapseln wir die RCW-Objekte an einigen Stellen in
..NET-Klassen, das heißt Klassen aus der Interop-Schicht sind member von
reinen .NET-Klassen. Beispiel:
class MyObject : IDisposable
{
private IMyCOMObject _myCOMObject;
public MyObject()
{
_myCOMObject = new MyCOMObject();
}
public int MyMethod()
{
// eigene Logik auf _myCOMObject
return _myCOMObject.MyMethod();
}
public void Dispose()
{
Marshal.ReleaseComObject( _myCOMObject );
}
}
Nun die Frage: Muss ich das Dispose selbst aufrufen oder macht das .NET für
mich? Wir haben nämlich das Problem dass die Applikation (MFC exe) im
Speicher bleibt, also COM-seitig AddRefs zuviel ausgeführt wurden.
Hat jemand da Ahnung, ein Pattern oder wie geht man da auf sicherem Wege
vor?
Gruß,