Project

General

Profile

Actions

Support Request #8942

closed

Force reload of ADTF filter

Added by hidden over 4 years ago. Updated almost 4 years ago.

Status:
Closed
Priority:
Normal
Customer:
PORSCHE
Department:
Requester's Priority:
Normal
Support Level:
2nd Level
Resolution:
Solved Issue
Product Issue Numbers:
Affected Products:
Platform:
Windows 10 64bit
Topic:
ADTF::FilterGraph
FAQ Links:

Description

Supportanfrage

Ich bin auf der Suche nach einer Möglichkeit, in ADTF 2.14.3 einen Filter bei „init configuration“ stets neu zu laden, d.h. unload und load eines (oder auch aller) Filter-Plugins. Hintergrund sind interne Variablen in einer Zulieferer-Lib (die wiederum mehrere Dlls anzieht), die man nur so resettet bekommt. Man kann das von mir gewünschte Verhalten erzeugen, indem man den Filter-Graph vor jedem Start etwas modifiziert (z.B. Deaktivieren / Aktivieren eines „Dummy-Filters“). Das ist jedoch auf Dauer etwas lästig und für automatisierte Abläufe ungeeignet.

Ich habe bereits versucht, in der Shutdown StageFirst Routine (desselben oder auch eines anderen Filters) das betroffene Plugin mit _runtime->UnregisterPlugin(pPlugin); auszuwerfen. In dieser Richtung hab ich etwas herum experimentiert, komme aber auf keinen grünen Zweig.

Kennen Sie eine Methode, mit der ein Reload der Filter-Plugins erzwungen werden kann?

Lösung

Ein Plugin neuladen geht nur mittels shutdown des kompletten ADTF Systems... also Neustart, was für dich keinen Sinn macht. Allerdings denke ich dass das Design dann falsch gewählt wurde. Wenn eine Library angezogen wird, dann kann dies auch im Init des Filters erfolgen. Dann würde es bei jeden InitConfiguration auch neu instanziiert werden und ihr hiervon eure Settings machen. Natürlich auch im Shutdown des Filters entsprechend rauswerfen. Dann müsste es eigentlich gehen, denn wenn ich es richtig verstehe, geht es dir darum, dein Plugin anhand einer neu geladenen Library erneut zu initialisieren. Das wäre dann die Stelle.

Eine Änderung am Filtergraphen sollte kein Neuladen der Plugins auslösen. Nur wenn man an den Global Properties etwas ändert (auch an denen aus der Config) sollten die Plugins neu geladen werden.
Leider fällt mir auch keine Alternative zum manuellen Importieren der DLL ein.

Actions #1

Updated by hidden over 4 years ago

  • Project changed from Public Support to 16
  • Status changed from New to In Progress
  • Topic set to ADTF::FilterGraph

@Timo: Ein Plugin neuladen geht nur mittels shutdown des kompletten ADTF Systems... also Neustart, was für dich keinen Sinn macht. Allerdings denke ich dass das Design dann falsch gewählt wurde. Wenn eine Library angezogen wird, dann kann dies auch im Init des Filters erfolgen. Dann würde es bei jeden InitConfiguration auch neu instanziiert werden und ihr hiervon eure Settings machen. Natürlich auch im Shutdown des Filters entsprechend rauswerfen. Dann müsste es eigentlich gehen, denn wenn ich es richtig verstehe, geht es dir darum, dein Plugin anhand einer neu geladenen Library erneut zu initialisieren. Das wäre dann die Stelle.

@Martin: Hast du noch Anmerkungen oder Korrekturen dazu ?

Actions #2

Updated by hidden over 4 years ago

Ein Plugin neuladen geht nur mittels shutdown des kompletten ADTF Systems

Das wäre ok, das Problem ist, dass ADTF die Plugins beim Übergang von shutdown auf init nur neu lädt, wenn sich der Filtergraph geändert hat oder eben das Projekt komplett neu geladen wird. Das Ganze wird in einem FEP-System betrieben und da geht das System nach jedem Run so oder so in shutdown zurück. Nur muss ich momentan dann ADTF komplett schließen oder etwas am Filtergraph verändern. Wenn man den Filtergraph also automatisch verändern könnte oder eine Art "Graph-modified"-Flag setzen könnte, wäre mir geholfen.

Wenn eine Library angezogen wird, dann kann dies auch im Init des Filters erfolgen. Dann würde es bei jeden InitConfiguration auch neu instanziiert werden und ihr hiervon eure Settings machen. Natürlich auch im Shutdown des Filters entsprechend rauswerfen.

Das stimmt natürlich, wenn man die *.dll dynamisch zur Laufzeit nachlädt (über LoadLibrary und mit GetProcAddress jede Funktion einzeln rausklauben). Dafür war ich allerdings bisher zu faul, daher wird die *.dll momentan über die dazugehörige *.lib statisch zur Kompilezeit gelinkt. Das Problem ist dann, dass der ganze Haufen mit dem Filter-Plugin geladen und entladen wird. Falls es aber keine easy Lösung gibt, um direkt den ganzen Filter neu zu laden, werde ich das aber wohl tun müssen...

Actions #3

Updated by hidden over 4 years ago

Das wäre ok, das Problem ist, dass ADTF die Plugins beim Übergang von shutdown auf init nur neu lädt, wenn sich der Filtergraph geändert hat oder eben das Projekt komplett neu geladen wird. Das Ganze wird in einem FEP-System betrieben und da geht das System nach jedem Run so oder so in shutdown zurück. Nur muss ich momentan dann ADTF komplett schließen oder etwas am Filtergraph verändern. Wenn man den Filtergraph also automatisch verändern könnte oder eine Art "Graph-modified"-Flag setzen könnte, wäre mir geholfen.

Hmm das stimmt so nicht ganz. Eine Änderung am Filtergraphen sollte kein Neuladen der Plugins auslösen. Nur wenn man an den Global Properties etwas ändert (auch an denen aus der Config) sollten die Plugins neu geladen werden.

Leider fällt mir auch keine Alternative zum manuellen Importieren der DLL ein.

Actions #4

Updated by hidden over 4 years ago

Alles klar, trotzdem vielen Dank für eure Hilfe!

Actions #5

Updated by hidden over 4 years ago

  • Project changed from 16 to Public Support
  • Subject changed from reload (unload und load) eines Filters in ADTF 2.14.3 erzwingen to Force reload of ADTF filter
  • Description updated (diff)
  • Status changed from In Progress to To Be Closed
  • Private changed from Yes to No
  • Resolution set to Solved Issue
Actions #6

Updated by hidden almost 4 years ago

  • Status changed from To Be Closed to Closed
Actions

Also available in: Atom PDF