2011-01-12 10 views
5

Ich habe eine Anwendung, die einige Klassen von einer nativen COM-DLL in Isolated Deployment verwendet.Aktivierungskontext verloren beim Arbeiten mit WinForm?

Vereinfachte: In Laufzeit lade ich die DLL mit seiner Manifest-Datei in ein bestimmtes Verzeichnis, ohne es zu registrieren. Ich erstelle dann einen Aktivierungskontext, der auf dieses Verzeichnis verweist, und erstelle anschließend Instanzen von Klassen aus der DLL. Nehmen wir an, Klasse A und nach einer Weile Klasse B erstellen. In diesem Fluss geht alles gut.

Das Problem begann, als ich meine Anwendung verändern ein WinForm zu sein. Das funktioniert gut, und der Ablauf kehrt zu meinem WinForm Wenn „Taste 1“ gedrückt ich den Aktivierungskontext erstellen, wie vor und dann eine Instanz der Klasse A. erstellen. Aber wenn "Taste 2" gedrückt wird, kann ich Klasse B nicht erstellen. Ich bekomme eine Ausnahme, die besagt, dass die Klasse nicht gefunden werden kann!

So scheint es, wie die WinForm irgendwie ist mein Aktivierungskontext durcheinander. - Warum ist das? Was passiert da? - Gibt es einen Weg um ihn herum?

Wenige Hinweise: - Ich habe versucht, Aktivierung Aktivierungskontexte mit sxstrace.exe, aber es protokolliert nur meine Aktivierung Kontext erstellen. - Ich habe versucht, Application.EnableVisualStyles() auskommentieren, aber es hat nicht geholfen. - Wenn ich jeden Aufruf an meine DLL mit erstellen und zerstören Aktivierungskontext es funktioniert, aber natürlich will ich nicht dorthin ..

Antwort

1

Die CLR garantiert nicht, den Win32-Aktivierungskontext zu erhalten/zu erhalten, wenn durch verwalteter Code.

Eine Abhilfe ist, nativen Code zu nennen, stellen Sie den Aktivierungskontext gibt, zu tun, was Sie brauchen, und dann den Kontext wiederherzustellen. Sie benötigen es wahrscheinlich nur zum Laden und Binden an das Objekt. Wenn Sie also ein IUnknown haben, können Sie das zurückgeben.

Martyn

Verwandte Themen