Frage

Ist es möglich, die RCW Referenzzähler auf einer unbekannten Schnittstelle zu erhöhen? (Das heißt nicht der Referenzzähler auf dem darunterliegenden COM-Objekt)

Ich habe einigen alten COM-Server-Code

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

Dieser Code funktioniert gut, aber jetzt muß ich es von einer anderen Methode nennen.

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

Die Art der ComObject variiert (das ist, warum es Objekt ist)

War es hilfreich?

Lösung

Es gibt die Marshal.AddRef () Methode, falsche Referenzzählungsänderung though. Ich bin ziemlich sicher, dass direkt die RCW Zahl erhöht wird ist nicht möglich. Dig sich aus dem tiefen Loch Sie sind in und fixieren den alten Code.

Andere Tipps

eine Art und Weise, die RCW Zählung zählt, wie oft das Objekt serialisiert wurde, können Sie diese Zahl erhöhen können durch einen zusätzlichen Marschall durchführen.

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
    }
}

Ich bin nicht sicher, würde ich empfehlen, diese Methode verwenden, ist es wahrscheinlich besser, zu versuchen und Ihrer ReleaseComObject Anrufe loszuwerden.

siehe

Für weitere Lesung dieser Blog-Post über das Thema ich schrieb.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top