ehem. OMSI - Forum
Würden Sie gerne auf diese Nachricht reagieren? Erstellen Sie einen Account in wenigen Klicks oder loggen Sie sich ein, um fortzufahren.
ehem. OMSI - Forum

Dieses Forum wurde geschlossen. Das neue Forum befindet sich auf www.omnibussimulator.de/forum !
 
StartseiteStartseite  Neueste BilderNeueste Bilder  SuchenSuchen  AnmeldenAnmelden  LoginLogin  

 

 API - DLL für Zugriff auf interne Variablen

Nach unten 
+2
Marcel Kuhnt
Fuenfer
6 verfasser
AutorNachricht
Fuenfer




Anzahl der Beiträge : 4
Anmeldedatum : 10.03.11

API - DLL für Zugriff auf interne Variablen Empty
BeitragThema: API - DLL für Zugriff auf interne Variablen   API - DLL für Zugriff auf interne Variablen Icon_minitimeSa 12 März - 14:20

Hallo,

wird es für den OMSI eine API geben?

Einen Ansatz kann man ja schon im Ordner "Plugins" sehen. Dort ist eine test.dll. Diese zeigt u.a. die Geschwindigkeit an.

API - DLL für Zugriff auf interne Variablen Omsi-d10

Dies wäre auch nützlich um Bremsdruck, Temperatur usw. auszulesen um diese auf Hardware Instrumente anzuzeigen.


Hinweis zur test.dll:
Code:
To activate, rename this file to "test.opl"

[dll]
Test.dll

[varlist]
2
Velocity
cockpit_heizregler_temp

[triggers]
1
bus_doorfront0

Dies wäre von Vorteil für z.B. Hardware-Simmer!

Grüße Ronald
Nach oben Nach unten
Fuenfer




Anzahl der Beiträge : 4
Anmeldedatum : 10.03.11

API - DLL für Zugriff auf interne Variablen Empty
BeitragThema: das schrieb Marcel:   API - DLL für Zugriff auf interne Variablen Icon_minitimeDi 15 März - 10:08

Also nach langem suchen ( da die Suchfunktion sehr engeschränkt ist) habe ich folgendes gefunden:


Zitat :
Dann darf ich jetzt mal verraten, wie wir das Hardware-Einbindungsproblem in OMSI gelöst haben:

Es gibt ein Verzeichnis "plugins", in welches man eine selbstprogrammierte DLL samt Konfig-Datei packen muss.

In die Konfig-Datei muss man den Namen der DLL, eine Liste der anzusteuernden Variablen und eine Liste der anzusteuernden Trigger eintragen. Die Reihenfolge ist wichtig.

Im Betrieb wird OMSI dann alle Konfigdateien suchen (nach Dateiendung) und die zugehörigen DLLs laden.

Dann wird OMSI jeweils die Listen durchgehen und für jede Variable und jeden Trigger, der in der Liste steht (identifikation erfolgt dann mittels des Indexes in der Liste) eine Methode aufrufen, die der DLL-Programmierer zu erstellen hat.

Beim Aufruf dieser Methode seitens OMSI teilt OMSI der DLL dann den aktuellen Wert der Variable mit (und natürlich den Index, damit die DLL weiß, um welche Variable es geht) und dann kann die Methode den Wert auch verändern und mittels "write" flag OMSI anweisen, diesen Wert zu übernehmen. Mit den Triggern läuft das soähnlich: Hier muss die DLL OMSI mitteilen, ob aktuell die zugehörige bspw. Taste "gedrückt" wird oder nicht. Dadurch, dass sich dieser Wert beim Drücken der Hardware-Taste verändert, weiß OMSI selbst, dass es den Trigger auslösen muss.

Damit sollte dann wirklich fast alles möglich sein, also insbesondere Schreiben und Auslesen sämtlicher Fahrzeugvariablen (außer Lenkung! Das muss leider - historisch bedingt - weiterhin über ein "Joystickmäßiges" Lenkrad geschehen) und Auslösen sämtlicher Trigger.

Es KANN aber theoretisch sein, dass die eine oder andere Modifikation im Fahrzeugscript vorgenommen werden muss. Und der Bastler muss sich natürlich aus dem Script raussuchen, welche Variablen er lesen und schreiben muss!

Viele Grüße

Marcel

PS: Achso, das Wichtigste vergessen: Die "andere" Seite muss dann natürlich die DLL ebenso machen! Aber das ist entsprechend flexibel: Die DLL kann ein eigenes Windows-Fenster öffnen, man kann Werte plotten und - der eigentliche Zweck - die DLL kann (wie auch immer das dann geht, davon hab ICH keine Ahnung! ) Hardware ansteuern.

Meine Frage: Ist es möglich den Programmcode für die Test.dll zu bekommen?
Oder eine Übersicht zum Aufruf der Programm-Prozeduren?

Nach oben Nach unten
Marcel Kuhnt
Admin
Marcel Kuhnt


Anzahl der Beiträge : 3364
Anmeldedatum : 26.04.09
Alter : 39
Ort : Berlin-Spandau

API - DLL für Zugriff auf interne Variablen Empty
BeitragThema: Re: API - DLL für Zugriff auf interne Variablen   API - DLL für Zugriff auf interne Variablen Icon_minitimeDi 15 März - 13:00

Jau, genau für diese Zwecke ist das gedacht! Wink

Dann werd ich mal eine Kurzanleitung hier geben: Die Einbindung der DLL sollte ja bereits klar sein. Es können beliebig viele eingebunden werden.

Der Code der Test-DLL ist dann der folgende:

Code:
library Test;

uses
  SysUtils,
  Dialogs,
  Classes,
  TestU in 'TestU.pas' {Form1};

{$R *.res}

procedure Start( AOwner: TComponent ); stdcall;
begin
        form1 := TForm1.Create( AOwner );
        form1.Show;
end;

procedure Finalize; stdcall;
begin
        form1.Free;
end;

procedure AccessVariable( varindex: word; var value: single; var write: boolean ); stdcall;
begin
        case varindex of
                0:
                begin
                        form1.Label2.Caption := floattostrF( value, ffFixed, 5, 1 ) + ' km/h';
                        form1.Gauge1.Progress := round( value );
                        write := false;                       
                end;
                1:
                begin
                        value := form1.TrackBar1.Position / 30;
                        write := true;
                end;
        end;
end;

procedure AccessTrigger( triggerindex: word; var active: boolean ); stdcall;
begin
        case triggerindex of
                0:
                begin
                        active := form1.button1_pressed;
                end;
        end;
end;

exports
        AccessVariable,
        AccessTrigger,       
        Start,
        Finalize;


begin
end.

Vom Prinzip her: Start und Finalize werden am Anfang bzw. Ende durchlaufen und ermöglichen wie hier gezeigt eine Initialisierung einer Form mittels "AOwner".

AccessVariable und AccessTrigger werden dann für alle Variablen bzw. Trigger durchlaufen, die in der test.opl eingetragen wurden.

AccessVariable( varindex: word; var value: single; var write: boolean )
varindex: Index der Variable (natürlich nullbasiert! Wink )
value: Wert der Variable - hier kann zunächst ausgelesen werden aber auch geschrieben
write: diese Variable muss "true" gesetzt werden, damit OMSI den Wert "value" nach dem Aufruf der Prozedur übernimmt

AccessTrigger( triggerindex: word; var active: boolean )
triggerindex: Index des Triggers
active: Wird diese Variable auf true gesetzt, dann wird der besagte Trigger im Folgenden ausgelöst.
Nach oben Nach unten
felix01

felix01


Anzahl der Beiträge : 566
Anmeldedatum : 03.03.11
Alter : 29
Ort : Fichtenwalde (nahe Potsdam)

API - DLL für Zugriff auf interne Variablen Empty
BeitragThema: Re: API - DLL für Zugriff auf interne Variablen   API - DLL für Zugriff auf interne Variablen Icon_minitimeDi 5 Apr - 19:59

Müssen die Plugins in Delphi geschrieben sein, oder kann man die auch z.B. in VB.NET schreiben?

wäre sehr von Vorteil, da ich Delphi nicht mächtig bin Sad
Nach oben Nach unten
http://oat-online.de
Marcel Kuhnt
Admin
Marcel Kuhnt


Anzahl der Beiträge : 3364
Anmeldedatum : 26.04.09
Alter : 39
Ort : Berlin-Spandau

API - DLL für Zugriff auf interne Variablen Empty
BeitragThema: Re: API - DLL für Zugriff auf interne Variablen   API - DLL für Zugriff auf interne Variablen Icon_minitimeDi 5 Apr - 21:31

Vom Prinzip her sollte es ja egal sein - du musst die Prozeduraufrufe eben nur an "deine" Programmiersprache anpassen! Wink
Nach oben Nach unten
felix01

felix01


Anzahl der Beiträge : 566
Anmeldedatum : 03.03.11
Alter : 29
Ort : Fichtenwalde (nahe Potsdam)

API - DLL für Zugriff auf interne Variablen Empty
BeitragThema: Re: API - DLL für Zugriff auf interne Variablen   API - DLL für Zugriff auf interne Variablen Icon_minitimeMi 6 Apr - 8:21

Also ich hab jetzt mal in einer VB.NET DLL ein Programm geschrieben, welches beim Start eine Form öffnet und beim Beenden die form wieder schließt. Folgender Code:

Code:
Public Class Class1
    Dim frm As New Form1
    Public Sub Start(ByVal AOwner As Object)
        frm.Show()
    End Sub

    Protected Overrides Sub Finalize()
        frm.Close()
        MyBase.Finalize()
    End Sub
End Class

Jedoch passiert nichts, außer wenn ich OMSI schließe, kommt folgender Fehler:


API - DLL für Zugriff auf interne Variablen Fehlerd
Nach oben Nach unten
http://oat-online.de
Marcel Kuhnt
Admin
Marcel Kuhnt


Anzahl der Beiträge : 3364
Anmeldedatum : 26.04.09
Alter : 39
Ort : Berlin-Spandau

API - DLL für Zugriff auf interne Variablen Empty
BeitragThema: Re: API - DLL für Zugriff auf interne Variablen   API - DLL für Zugriff auf interne Variablen Icon_minitimeMi 6 Apr - 9:30

Dann versuch erstmal deine DLL von einem eigenen Programm aus zu starten...
Nach oben Nach unten
JanH




Anzahl der Beiträge : 10
Anmeldedatum : 12.04.11

API - DLL für Zugriff auf interne Variablen Empty
BeitragThema: Re: API - DLL für Zugriff auf interne Variablen   API - DLL für Zugriff auf interne Variablen Icon_minitimeDi 12 Apr - 15:42

Meine Vermutung: Eine .NET-DLL und eine 'normale' Win32-Anwendung vertragen sich nicht so einfach, du müsstest also auf C++/Delphi/... umsteigen.
Nach oben Nach unten
felix01

felix01


Anzahl der Beiträge : 566
Anmeldedatum : 03.03.11
Alter : 29
Ort : Fichtenwalde (nahe Potsdam)

API - DLL für Zugriff auf interne Variablen Empty
BeitragThema: Re: API - DLL für Zugriff auf interne Variablen   API - DLL für Zugriff auf interne Variablen Icon_minitimeDi 12 Apr - 15:45

hab ich mir schon irgendwie gedacht, da ja die .NEt Sprachen doch sone "geschlossene Sache" sind
Nach oben Nach unten
http://oat-online.de
MANSD202FAN

MANSD202FAN


Anzahl der Beiträge : 1106
Anmeldedatum : 31.03.11
Alter : 25
Ort : Tübingen [Baden-Württemberg]

API - DLL für Zugriff auf interne Variablen Empty
BeitragThema: Re: API - DLL für Zugriff auf interne Variablen   API - DLL für Zugriff auf interne Variablen Icon_minitimeDi 12 Apr - 17:08

Bei mir kommt mitten im spiel diese fehlermeldung und ich muss schließen! scratch
https://i.servimg.com/u/f28/16/38/55/36/fehler12.png
Ich verstehe das nicht Marcel oder Rüdiger wist ihr warum das so ist?
Nach oben Nach unten
holmexx




Anzahl der Beiträge : 8
Anmeldedatum : 05.05.11
Alter : 66
Ort : Berlin-Neukölln

API - DLL für Zugriff auf interne Variablen Empty
BeitragThema: Re: API - DLL für Zugriff auf interne Variablen   API - DLL für Zugriff auf interne Variablen Icon_minitimeDo 5 Mai - 20:52

Hallo,

ich versuche mich gerade an einem PlugIn für's IBIS. Dazu die Frage:

Habe ich in der DLL nur Zugriff auf Fahrzeugvariablen oder auch auf Systemvariablen (z.B. aktuelle/s Spielzeit/Datum)?

Mit der Einbindung von 'Time' in die .opl hatte ich nämlich keinen Erfolg.

Gruß, und viiiiiiiiiiiiielen Dank für den g..... Simulator, Holger.
Nach oben Nach unten
Marcel Kuhnt
Admin
Marcel Kuhnt


Anzahl der Beiträge : 3364
Anmeldedatum : 26.04.09
Alter : 39
Ort : Berlin-Spandau

API - DLL für Zugriff auf interne Variablen Empty
BeitragThema: Re: API - DLL für Zugriff auf interne Variablen   API - DLL für Zugriff auf interne Variablen Icon_minitimeSo 8 Mai - 6:54

Auha, ja, stimmt, DAS geht in der Tat nicht...!

Da hilft vorerst nur ein Workaround:

Binde hierzu zwei Dateien in die gewünschten Busse ein die folgendermaßen aussehen müssten (nicht getestet!):

PlugInIBIS_varlist.txt:

Code:

PlugInIBIS_Day
PlugInIBIS_Month
PlugInIBIS_Year

PlugInIBIS.osc:

Code:

{macro:PlugInIBIS_frame}
    (L.S.Day) (S.L.PlugInIBIS_Day)
    (L.S.Month) (S.L.PlugInIBIS_Month)
    (L.S.Year) (S.L.PlugInIBIS_Year)
{end}

Du musst dann natürlich für die Einbindung die Bus-Datei und die Haupt-Scripts (MAN_SD80_main.osc usw.) manipulieren, weshalb ich nur bedingt zur Anwendung (und vor allem Veröffentlichtung) DIESER Zusatzfunktion rate...

Auf jeden Fall schreib ich es mir auf für Updates, dass man vieleicht auch ohne den Workaround auskommt...
Nach oben Nach unten
Gesponserte Inhalte





API - DLL für Zugriff auf interne Variablen Empty
BeitragThema: Re: API - DLL für Zugriff auf interne Variablen   API - DLL für Zugriff auf interne Variablen Icon_minitime

Nach oben Nach unten
 
API - DLL für Zugriff auf interne Variablen
Nach oben 
Seite 1 von 1
 Ähnliche Themen
-
» Einheiten von Variablen
» Mechanismus des Ladens von Variablen auf den Stack
» Erste Hilfe
» Zugriffsverletzung bei Zugriff auf Deutsche Sprache InGame
» Info Scriptcode - Beschreibung unvollständig - Hilfe zu Variablen und Operatorkürzeln erbeten

Befugnisse in diesem ForumSie können in diesem Forum nicht antworten
ehem. OMSI - Forum :: OMSI - Der Omnibussimulator (deutsch) :: Wünsche & Anregungen-
Gehe zu: