Hallo M+R,
ich arbeite an einem PlugIn, welches in C# geschrieben wird. Mit ein paar Umwegen ist es möglich, die DLL in OMSI geladen zu bekommen. Allerdings gibt es ein Problem mit der Schnittstelle selbst.
Die erwartete Funktion "Finalize" hat in der .Net-Welt eine spezielle Funktion, was zu einem Konflikt führt:
Zitat von CompilerWarnung CS0465: Eine neue Finalize-Methode kann den Aufruf eines Destruktors stören. Wollten Sie einen Destruktor deklarieren?
Und genau diese Störung tritt auch ein. Ist die Funktion deklariert, beantwortet OMSI dies unmittelbar nach Programmstart mit "External Exception E0434F4D" (Die Speicheradresse ist bei mir jedes mal die selbe. Sicherlich kein Zufall).
Lasse ich die Funktion weg, startet OMSI und mein PlugIn fehlerfrei. Allerdings kann ich OMSI nun nicht mehr fehlerfrei beenden, da die erwartete Funktion "Finalize" nicht gefunden wird. Ergo führt dies zu einer 0-Pointer-Exception. Beende ich OMSI über den Task Manager gibt es zwar keine Exception, jedoch werden auch die Fahrerstatistiken nicht mehr aktualisiert, was bei mir ein mächtiger Motivationskiller darstellt.
Um den Leitmotto von OMSI gerecht zu werden und falls die die Funktionsnamen nicht von Delphi fest vorgegeben werden, wäre es sinnvoll die Funktionsnamen so zu bestimmen, daß sie nicht mit anderen Sprachelementen kollidieren. Es wäre sehr mühsehlig, wenn jedes PlugIn zwingend in Delphi geschrieben werden müsste. "Weil's geht" ist dann nicht mehr wirklich zutreffend
Das Einfachste wäre sicherlich, die opl-Datei zu erweitern, in der man die Namen der Funktionen angeben könnte. Ob man anhand des Strings die dazu gehörige Funktion in Delphi aufrufen kann, entzieht sich allerdings meiner Kenntnis. Ansonsten könnte man vlt. prüfen, ob FunktionA vorhanden ist, wenn nicht FunktionB ausführen. Die Existenz auf vorhandene Funktionen lassen sich in der .Net-Welt abfragen, also sollte das in Delphi auch irgendwie möglich sein...
Es wäre super, wenn sich eine Korrektur dieses Konflikts zeitnah (bspw. im Zuge des OL 5-Updates) einfinden könnte. Denn leider ist eine Veröffentlichung meines PlugIns unter dieses Gesichtspunkten nicht zumutbar.
Vielen Dank im Voraus.
PS:
Apropos Fahrerstatistiken... wäre es nicht sinnvoll, die Stats in der Simulation aller xy Minuten oder nach Abschluß einer Fahrplanfahrt zu speichern? Wenn ich bspw. eine ganze Schicht fahren will und OMSI/Windows stürzt ab, ist alles verloren. Sehr ärgerlich - kam leider auch schon mehrfach vor.