Winapi.Mtx.SafeRef

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

Delphi

function SafeRef(const rid: TGUID; Unk: IUnknown): Pointer;

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
function public Winapi.Mtx.pas Winapi.Mtx Winapi.Mtx

Beschreibung

Gibt eine Referenz auf ein transaktionales Objekt zurück, das außerhalb seines Kontextes sicher übergeben werden kann.

SafeRef kapselt die MTS-Funktion SafeRef. Diese MTS-Funktion übernimmt eine Referenz auf die ID der Schnittstelle (rid), die das aktuelle Objekt an ein anderes Objekt oder einen Client übergeben will, und eine Referenz auf eine Schnittstelle des aktuellen Objekts (pUnk).

SafeRef liefert einen Zeiger auf die im Parameter rid angegebene Schnittstelle. Dieser kann sicher außerhalb des aktuellen Objektkontextes übergeben werden.

Bei COM+ ist es immer sicher, eine Selbst-Referenz an einen Client oder ein anderes Objekt zu übergeben. Wenn Sie SafeRef in einer Anwendung aufrufen, die unter einer Windows-Version ausgeführt wird, die COM+ implementiert, gibt SafeRef nur den als pUnk übergebenen Zeiger zurück. Daher ist es nicht erforderlich, SafeRef für COM+-Anwendungen aufzurufen. In Anwendungen, die sowohl unter MTS als auch unter COM+ eingesetzt werden, hat der Aufruf von SafeRef keine störende Wirkung.

Unter MTS sollten Sie SafeRef immer vor der Übergabe einer Selbst-Referenz an einen Client oder ein anderes Objekt aufrufen und dann die von diesem Aufruf zurückgelieferte Referenz übergeben. Unter MTS ist es nicht sicher für ein Objekt, einen self- (Delphi) oder this-Zeiger (C++) oder eine durch einen internen Aufruf von QueryInterface ermittelte Selbst-Referenz an einen Client oder ein anderes Objekt zu übergeben. Wenn eine solche Referenz außerhalb des Objektkontextes übergeben wird, ist sie nicht mehr gültig.

Wird SafeRef mit einer bereits sicheren Referenz aufgerufen, wird diese unverändert zurückgegeben und der Referenzzähler der Schnittstelle inkrementiert.

Wenn ein Client QueryInterface für eine sichere Referenz aufruft, sorgt MTS automatisch dafür, dass die an den Client zurückgegebene Referenz ebenfalls sicher ist.

Ein Objekt, das eine sichere Referenz erhält, muss diese bei Beendigung freigeben.

Sichere Referenzen haben unter MTS andere Zeigerwerte als unsichere. Beispielsweise haben self oder this und die sichere Version von self oder this nicht denselben Wert. Es ist wichtig, dies beim Test, ob zwei Zeiger dasselbe Objekt referenzieren, zu beachten. Der Aufruf von QueryInterface für IID_IUnknown für jeden Zeiger und der Vergleich der Werte der zurückgegebenen Zeiger könnte zu falschen Schlüssen führen. Es ist möglich, dass beide Zeiger dasselbe Objekt referenzieren, aber ein Zeiger stellt eine sichere Referenz dar und der andere nicht. Wenn beide Referenzen sicher sind, können sie verglichen werden. Diese Überlegungen gelten nur für MTS-Objekte, weil Clients nie Zugriff auf unsichere Referenzen haben sollten.

Anmerkung:  Beim Schreiben transaktionaler Objekte, die sowohl unter MTS als auch unter COM+ installiert werden können, sollten Sie die Methode SafeRef von TMtsDll benutzen. TMtsDll prüft automatisch die aktuelle Umgebung und liefert die entsprechende Referenz.

Siehe auch