Laden...

Simconnect.dll in Sharpdevelop laden funktioniert nicht wegen falschem Format

Erstellt von STF-DIR vor 5 Jahren Letzter Beitrag vor 5 Jahren 3.534 Views
S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren
Simconnect.dll in Sharpdevelop laden funktioniert nicht wegen falschem Format

Hallo,

ich benutze Sharpdevelop und will die Simconnect.dll vom Prepar3D v4.4 SDK laden , aber ich bekomme immer eine Fehlermeldung:

Fehlermeldung:
System.BadImageFormatException: Die Datei oder Assembly "LockheedMartin.Prepar3D.SimConnect, Version=4.4.0.0, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden. Es wurde versucht, eine Datei mit einem falschen Format zu laden.

bei Test_2.MainForm..ctor()
bei Test_2.Program.Main(String[] args) in c:\Users\STF-DIR\Documents\SharpDevelop Projects\Simconnect\Test_2\Test_2\Program.cs:Zeile 27.

Nach Google Suche habe ich gefunden, das es wohl daran liegt, das die dll 32 bit ist und mein Projeckt wohl 64 bit. Anscheinend geht es darum nicht.
Ich hab also in den Projekteinstellungen unter Build versucht unter "Target CPU"
32-bit-intel compatibler Prozessor einzustellen aber das geht auch nicht.
Leider auch alle anderen Möglichkeiten funktionieren nicht.

Ich weiß nicht mehr weiter und bitte um Hilfe.

Danke
Matthias

F
10.010 Beiträge seit 2004
vor 5 Jahren

The Prepar3D v4 application is 64-bit and therefore is no longer backwards compatible with 32-bit DLLs of previous versions of Prepar3D, FSX, and ESP.

Du hast das gelesen?

Das bedeutet genau das Gegenteil, deine Prepar3D installation ist wahrscheinlich veraltet ( 32Bit).

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

Hallo,

danke für die antwort.

Dann sollte es ja funktionieren wenn ich einfach ein neues Projekt erstelle, tit es aber nicht.

Ich habe aber Prepar3d v4.4 installiert und auch das SDK ist das aktuelle.
Das verzeichnis wo das SDK installiert ist nennt sich "Prepar3D v4 SDK 4.4.16.27106"

Aber egal was ich einstelle, es kommt immer der gleiche Fehler.

hmm...was kann das denn nur sein? Ich habe keine Idee mehr

Matthias

1
124 Beiträge seit 2012
vor 5 Jahren

Hast du dann die Konfiguration auf 64 bit konfiguriert?

Gruß

1.029 Beiträge seit 2010
vor 5 Jahren

Hi,

naja - den Ausführungen der Anderen ist bereits zu entnehmen, dass du unter x64 starten musst. (Standard ist unter VS z.B. immer noch x86)

Den Issues von SharpDevelop nach (speziell https://github.com/icsharpcode/SharpDevelop/issues/724) sieht das ggf. nicht ganz so einfach aus... Kein Plan ob SharpDevelop das überhaupt unterstützt - aber das GitHub-Projekt sieht komplett verlassen aus.

LG

16.835 Beiträge seit 2008
vor 5 Jahren

SharpDevelop wurde von Teammitgliedern bereits 2017 als tot bezeichnet.
Es wird nicht mehr aktiv weiter betrieben; sie können nicht mit der Geschwindigkeit mithalten und können die neuen Funktionen des .NET Ökosystems einfach nicht mehr nachreichen.

Das SharpDevelop Team empfiehlt den Umstieg auf VSCode oder VS IDE.

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

Hallo,

danke euch für die Antworten.

Ich bin gerade dabei VS zu installieren und hoffe es geht damit oder gibt es noch eine andere IDE die zu empfehlen ist ?

Matthias

16.835 Beiträge seit 2008
vor 5 Jahren

Es gibt keine IDE, die VS das Wasser reichen könnte.

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

Oh je, nach etlichen installationen geht es endlich 😃

Ihr scheint euch ja damit auszukennen.
Ziel ist es das Simconnect Fenster von GSX von fsdreamteam auszulesen.
Habt ihr da einen ansatz wie ich das mache?

Danke
Matthias

16.835 Beiträge seit 2008
vor 5 Jahren

Keine Ahnung wovon Du sprichst 😉
Scheint wohl irgendein PC Spiel laut Google zu sein.

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

Oh Sorry,

nachdem ihr gleich wusstet was simconnect.dll ist dachte ich ihr wisst das es um den Prepar3D von
hier: https://prepar3d.com/
geht und GSX, ein Addon dafür von
hier: http://www.fsdreamteam.com/

Also der Prepar3D ( nachfolger vom guten alten FSX ) ist der Flugsimulator und das GSX ist ein AddOn, was das Be- und Entladen, sowie das Pushback macht.

Wenn man das GSX aktiviert, dann öffnet das so ein Simconnect Fenster, wo man dann die jeweilige funktion die man ausführen will , auswählen kann.
Genau dieses Simconnect Fenster will ich auslesen und die jeweilig angeboten Auswahlmöglichkeiten in meinem Programm darstellen. Sozusagen so eine Art Remote App für das GSX.

Jetzt muss ich hat einen weg finden, das Fenster auszulesen.

Matthias

1.029 Beiträge seit 2010
vor 5 Jahren

Hi,

das sieht nach einer kleinen Mammutaufgabe aus 😕

  1. Fenster auslesen (gerade die von 3D-Anwendungen) sagt sich zwar leicht - ist aber viel - nur nicht leicht - denn letztendlich müsstest du Bilder analysieren wenn du drüber nachdenkst. Realistisch ist das in meinen Augen eher nicht.

  2. Wenn man sich "Prepare" anschaut - sieht man, dass das ganze auf Microsoft ESP basiert (kannte ich vorher nicht) - aber - das heißt, dass es eine API gibt: https://docs.microsoft.com/en-us/previous-versions/microsoft-esp/cc526948%28v%3dmsdn.10%29

Mein Tipp: Arbeite dich lieber mal da ein und schau ob du dort bekommst was du brauchst. Hilfe zu Microsoft ESP dürfte hier im Forum allerdings mindestens mal schwer sein - glaube nicht, dass sonderlich viele damit arbeiten.

Der Kram vom fsdreamteam ist ja wiederum "nur" ein Addon für ESP/Prepare - ob das jetzt wirklich über die API geht... Kein Plan.

LG

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

Hallo,

also das Fenster sollte man über Simconnect auslesen können, muss halt rausfinden wie das geht. Ein Beispiel hab ich glaube ich schon gesehen, allerdings in C++. Keine Ahnung ob ich das auf C# ummünzen kann.

Das Fenster hat immer den gleichen Namen, sollte also gehen irgendwie.

Matthias

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

Hallo,

habs wiedergefunden, und das scheint das zu sein, was ich brauche.
Leider eben nur in C++....
Ich glaube ich brach da ein bisschen Hilfe das in C# zu übersetzen wenn möglich...?

Wäre echt hilfreich.

Hab die Datei mal angehangen
Matthias

4.939 Beiträge seit 2008
vor 5 Jahren

Den Code kann man doch fast 1:1 nach C# übertragen, und unter Managed SimConnect Projects gibt es noch eine Einstiegshilfe dazu.

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

Naja,

da bin ich gerade dabei. Der code hier öffnet ein Fenster und reagiert dann auf das ausgewählte Item in dem Fenster.
Ich muss aber einfach nur reagieren, wenn ein Fenster geöffnet wird.
Arbeite mich da gerade durch und bin auch nicht gerade der Crack , weder in C# da gehts so, aber C++ gar nicht. 😃

Matthias

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

...mir fehlt so ein bisschen der Ansatz wie ich überhaupt darauf reagieren kann, das dieses Fenster geöffnet wird. Das wär schon mal ein Anfang.

16.835 Beiträge seit 2008
vor 5 Jahren

Bisschen mehr Eigeninitiative wirst Du schon benötigen; Du wirst nicht viele Leute finden - meine Vermutung - die hier sich entweder a) darin gut auskennen oder b) zusätzlich die Zeit haben das Zeug für Dich herauszufinden.

Daher mein Tipp: der Link von Th69 zeigt ausführlich, wie man prinzipiell eine Verbindung herstellt und Events (in diesem Falle Messages) abfängt (hast es überhaupt angeschaut?).
Ergo mal mit dem Debugger schauen, welche Messages so über den Kanal laufen und schauen, ob was für Dich dabei ist..

Ansonsten eben mal die Klassen im Objekt Browser anschauen, wenn die Dokumentation nicht alle Fragen beantwortet (die man hier findet: http://www.prepar3d.com/SDKv4/LearningCenter.php). (über Google einfach zu finden).
So geht man i.d.R. vor, wenn man Klassen nicht kennt und wissen will, wie sie funktionieren.

Wir haben alle mal klein angefangen - wird schon klappen 😉

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

Genau, da hast du Recht.
Muss mich erst mal in alles einlesen und versuchen zu verstehen.
Falls ich dann auch nicht mehr weiterkomme, dann melde ich mich noch mal.
Muss aber erst mal lesen, is ja auch nicht ganz wenig 😃

Connecten geht ja soweit, ich weiß nur noch nicht wie ich das Event_ID finde, welches ich abfangen muss. Die aus dem Beispiel hab ich in dem SDK gar nicht gefunden.
Keine Ahnung so richtig.

Also danke erst mal allen für die Hilfe
Matthias

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

Ein kleines Problem gibt es aber:

in dem funktionierenden C++ Beispiel wird ein Event namens
EVENT_TEXT_WINDOW_CREATED
registriert.

Wenn ich das in meinem C# versuche, dann bekomme ich eine Fehlermeldung mit einer nummr (7)

Nun hab ch auf der SDK Seite nach dem Event gesucht. Das gibt es da gar nicht.
Die anderen gibt es, nur das eben nicht.

http://www.prepar3d.com/SDKv3/LearningCenter/utilities/variables/event_ids.html

Aber warum geht das denn dann in dem C++ programm, das verstehe ich nicht?
Ich versteh nicht woher die das in dem Beispiel haben?

Ich hab das enum angepasst und das Event da mit aufgenommen, aber das scheint so nicht richtig zu sein.

Matthias

16.835 Beiträge seit 2008
vor 5 Jahren

in dem funktionierenden C++ Beispiel wird ein Event namens
EVENT_TEXT_WINDOW_CREATED
registriert.

Hat es den Namen (String?) oder soll das ein ENum (also int?) sein?

Wenn ich das in meinem C# versuche, dann bekomme ich eine Fehlermeldung mit einer nummr (7)

Wenn Du hier nicht den kompletten Fehler zeigst, dann kann Dir keiner helfen.
Auch wir wissen nicht, wofür die Nummer 7 steht oder gar wo der Fehler geworfen wird. Können nicht hellsehen 😉

Laut der Webseite gibt es keine Nummer, sondern Namen (=> String).

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

Hallo,

also das müsste ein int sein, da das enum aus dem c++ Beispiel so aussieht:


enum EVENT_ID {
    EVENT1,
    EVENT2,
    EVENT_MENU_1,
    EVENT_TEXT_1,
    EVENT_MESSAGE_1,
    EVENT_TEXT_WINDOW_CREATED,
};

also hab ich das so in c# übernommen:


        enum EVENTS
        {
            PITOT_TOGGLE,
            FLAPS_INC,
            FLAPS_DEC,
            FLAPS_UP,
            FLAPS_DOWN,
            EVENT_TEXT_WINDOW_CREATED,
        };

Das sollte erst mal so richtig sein.

Dann wird das Event so in c++ registriert :


hr = SimConnect_SubscribeToSystemEvent(hSimConnect, EVENT_TEXT_WINDOW_CREATED, "TextEventCreated");

das hab ich dann zu denanderen, funktionierenden Events, in c# hinzugefügt:


                // subscribe to all four flaps controls
                simconnect.MapClientEventToSimEvent(EVENTS.FLAPS_UP, "FLAPS_UP");
                simconnect.AddClientEventToNotificationGroup(NOTIFICATION_GROUPS.GROUP0, EVENTS.FLAPS_UP, false);
                simconnect.MapClientEventToSimEvent(EVENTS.FLAPS_DOWN, "FLAPS_DOWN");
                simconnect.AddClientEventToNotificationGroup(NOTIFICATION_GROUPS.GROUP0, EVENTS.FLAPS_DOWN, false);
                simconnect.MapClientEventToSimEvent(EVENTS.FLAPS_INC, "FLAPS_INCR");
                simconnect.AddClientEventToNotificationGroup(NOTIFICATION_GROUPS.GROUP0, EVENTS.FLAPS_INC, false);
                simconnect.MapClientEventToSimEvent(EVENTS.FLAPS_DEC, "FLAPS_DECR");
                simconnect.AddClientEventToNotificationGroup(NOTIFICATION_GROUPS.GROUP0, EVENTS.FLAPS_DEC, false);

                simconnect.MapClientEventToSimEvent(EVENTS.EVENT_TEXT_WINDOW_CREATED, "EVENT_TEXT_WINDOW_CREATED");
                simconnect.AddClientEventToNotificationGroup(NOTIFICATION_GROUPS.GROUP0, EVENTS.EVENT_TEXT_WINDOW_CREATED, false);

soweit ich das sehe sollte das eigentlich so funktionieren, tut es aber leider nicht.
Der Fehler kommt hier:


        void simconnect_OnRecvException(SimConnect sender, SIMCONNECT_RECV_EXCEPTION data)
        {
            displayText("Exception received: " + data.dwException);
        }

und spuckt leider nur so ne blöde nummer aus.

Matthias

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

Hallo,

hab die Lösung gefunden...es heißt:

TEXTWINDOW

super.... 😃

Danke euch
Matthias

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

Hallo noch mal,

wie ich geschrieben habe geht es jetzt zwar, aber ich finde einfach diese Events nicht, also nicht das, welches in dem Beispiel verwendet wird.

In diesem Beispiel hier:
https://www.prepar3d.com/SDKv4/sdk/simconnect_api/samples/text_menu.html

wird zum Beispiel in dieser Zeile:
hr = SimConnect_SubscribeToSystemEvent(hSimConnect, EVENT_TEXT_WINDOW_CREATED, "TextEventCreated");

Event_Text_Window_Created verwendet.

Also entweder suche ich auf der falschen seite:
https://docs.microsoft.com/en-us/previous-versions/microsoft-esp/cc526980(v%3dmsdn.10)

oder ich bin zu doof zum suchen 😃

Könnt ihr mir helfen, wo stehen denn diese Events zum geier 😃 ???

Matthias

16.835 Beiträge seit 2008
vor 5 Jahren

Du wirst vermutlich mehr Glück haben, wenn Du einfach im Forum des SDK nachfragst 😉

S
STF-DIR Themenstarter:in
368 Beiträge seit 2006
vor 5 Jahren

hmm...ok, werd ich versuchen

Danke