Hi all
Ich möchte mich zuallererst bedanken bei holmexx für sein OMSI Plugin Framework. Es hat mir sehr geholfen bei der Programmierung eines Plug-ins für die Motion Platform Software auf www.xsimulator.net
Allerdings ist dieses Framework für meine einfachen Bedürfnisse viel zu mächtig, da ich für das Plugin lediglich ein paar Werte wie Geschwindigkeit, Längsbeschleunigung, etc. exportieren will.
Ich habe daher eine DLL geschrieben, die sehr einfach zu benutzen und zu ändern ist:
Erstelle ein neues Projekt in Visual C++ (New Project… → Win32 Project → spezifiziere Name und Location (z.B. OMSIDLL) → OK → Next → Application type: DLL → Finish)
Die automatisch erstellte Datei "dllmain.cpp" kannst du gleich löschen, da wir lediglich die Datei OMSIDLL benutzen.
Kopiere den Code unten (OMSIDLL.cpp) in die Datei "OMSIDLL.cpp"; der bereits vorhandene Code wird komplet überschrieben.
Erstelle nun im Windows Explorer eine leere Textdatei in deinem Projektordner ("\OMSIDLL" oder so) und benenne sie "OMSIDLL.def".
Kopiere die Zeilen unten (OMSIDLL.def) in diese Datei und speichere sie (mit der Endung .def).
Im VisualStudio wählst du nun im Menu Project → OMSIDLL Properties… → Configuration Properties → Configuration: All Configurations → Linker → Input → Module Definition File → <Edit…> → gib "OMSIDLL.def" ein → OK → OK
Build das Project und kopiere die erhaltene OMSIDLL.dll in den Ordner <OMSI installation folder>\plugins zusammen mit der (zu erstellenden) Datei OMSIDLL.opl; in der Datei definierst du ja bekanntlich deine Variabeln und Trigger (wie, siehe hier; die möglichen Variablen findest du hier und in den entsprechenden Dateien in <OMSI installation folder>\program)
Viel Spass!
// OMSIDLL.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
extern "C" __declspec(dllexport)void __stdcall Start(void* aOwner);
extern "C" __declspec(dllexport)void __stdcall AccessVariable(unsigned short varindex, float* value, bool* write);
extern "C" __declspec(dllexport)void __stdcall AccessTrigger(unsigned short triggerindex, bool* active);
extern "C" __declspec(dllexport)void __stdcall Finalize();
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
void __stdcall Start(void* aOwner)
{
//Place your initialisation code here
//int msgbox = MessageBox(0,(LPCWSTR)L"Start",(LPCWSTR)L"Message",MB_OK );
}
void __stdcall AccessVariable(unsigned short varindex, float* value, bool* write)
{
//Place your variables code here
switch(varindex)
{
case 0: //1st variable in OMSIDLL.opl
;//do something with *value;
case 1: //2nd variable in OMSIDLL.opl
;//do something with *value;
case 2: //3rd variable in OMSIDLL.opl
;//do something with *value;
case 3: //3rd variable in OMSIDLL.opl
;//do something with *value;
//case …
}
//int msgbox = MessageBox(0,(LPCWSTR)L"Variables",(LPCWSTR)L"Message",MB_OK );
}
void __stdcall AccessTrigger(unsigned short triggerindex, bool* active)
{
//Place your trigger code here
//int msgbox = MessageBox(0,(LPCWSTR)L"Trigger",(LPCWSTR)L"Message",MB_OK );
}
void __stdcall Finalize()
{
//Place your cleanup code here
//int msgbox = MessageBox(0,L"Stop",L"Message",MB_OK );
}
LIBRARY OMSIDLL.dll
EXPORTS
Start
AccessVariable
AccessTrigger
Finalize