hacker
Goto Top

Assemblyproblem bei Cpp CLI

Programm findet Assembly nicht

Ich habe vor kurzem Antme! für mich entdeckt, da ich aber lieber mit C++/CLI als mit C# arbeiten will und die orginale C++/CLI - Version wohl nirgens mehr runterladbar ist (hab keinen funktionierenden Link gefunden), hab ich die C# Vorlage in C++/CLI umgeschrieben und die passenden Assemblies eingebunden. Wenn ich jetzt aber Antme.exe starte, sagt er mir, ich würde externe Assemblies einbinden und sobald ich die Simulation beginne, gibt's die Fehlermeldung: "... SpielerCPP.dll oder eine Abhänigkeit davon wurde nicht gefunden.

Ich bin mit meinem Latein echt am Ende.

Vielen Dank schon mal im vorraus!

PS: Ich hab die Datei im richtigen Ordner.

Content-ID: 145796

Url: https://administrator.de/forum/assemblyproblem-bei-cpp-cli-145796.html

Ausgedruckt am: 23.12.2024 um 01:12 Uhr

VuuRWerK
VuuRWerK 06.07.2010 um 08:49:35 Uhr
Goto Top
Dieser Fehler kommt unglücklicherweise auch wenn zwar die dll da ist aber bspw. der Einsprungspunkt, also eine Funktion oder Klasse, falsch ist. Falsch heist hier bspw. ein Schreibfehler im Namen oder aber auch bei Angabe von manuellen Speicheradressen in der dll das diese abweichen.
Am besten ist wirklich einmal durch debuggen bis der Fehler entsteht, dabei immer merken welche Methode/Funktion oder Klasse gerade aufgerufen werden möchte und dann vergleichen mit dem Einsteigspunkt in der abhängigen dll.

Gut Schuß
VuuRWerK ;)
Hacker
Hacker 06.07.2010 um 10:22:11 Uhr
Goto Top
Debuggen funktioniert leider nicht, da das Spiel dann völlig abschmiert und gar nichts findet.

Der Schreibfehler bei einem Namen klingt für mich am logischsten, allerdings hab ich die Vorlage direkt übertragen und nur die override in virtual ...() override und die normalen in ^ Typen umgewandelt, aber falsch abgeschrieben hab ich nichts (zwei mal überprüft).

Aber kann es theoretisch sein, dass ich in der AssemblyInfo.cpp etwas angeben muss, was bei C# nicht hingehört? (Die hab ich nähmlich auch übernommen!)
VuuRWerK
VuuRWerK 06.07.2010 um 10:41:28 Uhr
Goto Top
Öhm, das einfach so "konvertieren" von C# nach C++/CLI klingt für mich ein wenig nach dem Fehler ;) Auch wenn die Sprachen sich syntaktisch ähnlich sind und sich augenscheinlich nur durch div. Operatoren wie ^ (Pointer auf ein verwaltetes Objekt, in C# implizit ohne extra Operator) oder dem Zusatz von "ref" in der Klassendeklaration um anzuzeigen das es ein von .NET verwaltetes Objekt sein soll. C++/CLI war eigentlich dafür gedacht natives C++ an das .NET Framework anzubinden um so bspw. die GUI zu implementieren bzw. um die GUI in C#/VB zu schreiben aber das Backend bleibt in C++ geschrieben.

Mich würde an der Stelle jetzt wirklich interessieren was Du alles so "umgeschrieben" hast aber ich denk das wird hier nicht mal eben in einen Post passen ;) Hast Du ggf. die Möglichkeit es hochzuladen? Dann kann ich da mal fix reinschauen um zu sehen ob Du ggf. noch mehr vergessen hast.

Nichtsdestotrotz denke ich ist es nicht die beste Lösung es einfach von C# nach C++/CLI umzuschreiben, aber sicherlich kann es funktionieren, wenn man Glück hat ;)

Gut Schuß
VuuRWerK ;)
VuuRWerK
VuuRWerK 06.07.2010 um 16:33:34 Uhr
Goto Top
Also ich hatte mal kurz ein wenig Zeit und habe mal die Vorlage und eine Demo Ameise (aTomZuckermeiser) in C++/CLI implementiert. Es kompiliert sauber, das AntME!-Hauptprogramm startet erstmal ohne Probleme. Problem ist jetzt das die Ameise erstmal nicht verwendet werden kann weil es von einem "unzulässigen" Assembly abhängt, nämlich "Microsoft.VisualC". Problem ist aber das dies die Kern-Komponente für C++/CLI ist. Man kann zwar über die Sicherheitseinstellungen von AntMe! Ameisen mit externen Assemblies zulassen aber spätestens beim starten der Simulation kommt der Fehler das die Minimalberechtigungen nicht ausreichen würden. D.h. man kann es zwar in C++/CLI implementieren und auch einbinden ins AntMe! aber nicht verwenden da es leider nicht unterstützt wird. An dieser Stelle müssten die Entwickler von AntMe! dies mit intigrieren damits geht.

Hier mal die Vorlage inkl. einer der Demo-Ameisen in C++/CLI: http://braincompiler.de/AntMe-CPP_CLI-Vorlage.zip

Wie gesagt, läd ohne Probleme aber man kann sie nicht benutzen weil C++/CLI nicht direkt von AntME! unterstützt wird und dafür extra Implementierungen von nöten sind. Ich habe mir zwar auch gleich die Sourcen von AntMe! gezogen und geschaut ob es eventuell mit ein paar Handgriffen getan ist aber dem scheint nicht so, leider. Man könnte sich ja mal an die Herren von AntMe! wenden und dies mal erfragen.

Gut Schuß
Christian ;)
Hacker
Hacker 06.07.2010 um 19:07:15 Uhr
Goto Top
Ich habe bereits eine E-Mail an die im Tutorial genannte Addresse von Tom Wendel geschrieben (sogar noch bevor ich diesen Thread erstellt habe), da eine von Ihm konvertierte Version Aufgrund der hohen Nachfrage nach eine C++ Variante schon existierte (irgendwo auf codeplex), hab aber, wie ich oben schon geschrieben habe, nichts gefunden (vermutlich schon wieder gelöscht).

Na ja, auf die Antwort warte ich jetzt schon seit mehr als einem halben Monat und ich nehme an, dass gar keine mehr kommt, aber wer weis.

Danke übrigens für deine Vorlage!
VuuRWerK
VuuRWerK 07.07.2010 um 10:11:25 Uhr
Goto Top
Hm, das ist natürlich ärgerlich. Ansonsten schreib ich gern auch mal jemanden von AntMe! an und schicke im gleichen Atemzug die Beispiel-Implementierung zu das man quasi gleich noch ein wenig Zubrot hat. Werde auch noch die anderen Demo-Ameisen implementieren.

Hoffe sie nehmen es an und man kann dann AntMe! auch in C++/CLI verwenden.

Gut Schuß
Christian ;)
Hacker
Hacker 07.07.2010 um 11:26:09 Uhr
Goto Top
Ist wohl nicht mehr nötig, da die Antwort gestern fünf Minuten vor Mitternacht eingetrudelt ist! (Wer schreibt den so spät noch E-Mails?)


Auf jeden Fall, hier ist die Antwort:


Hallo Lukas,

Erstmal sorry für die späte Antwort.
Zu deiner Beruhigung: Das Projekt ist alles andere als eingestellt worden. Im Moment ist nur die Minimalst-Website online, damit wir mehr oder weniger in Ruhe am neuen Schmuckstück arbeiten können. Die neue Seite geht auch demnächst online.

Was es allerdings auch dann nicht geben wird ist eine C++-Version des Projektes. Gab es meines Wissens auch niemals offiziell. Du kannst aber, sofern du schon etwas C++-Skills hast, recht einfach selbst herstellen. Du brauchst dazu im Grunde nur eine Klassenbibliothek mit dem Zielframework Version 2.0, stellst einen Verweis auf die AntMe.Core.dll her und erbst in einer neuen Klasse von der Basisklasse AntMe.Deutsch.Basisameise. Danach kannst du alle benötigten Methoden wie "Sieht(Zucker zucker)" einfach überschreiben.

Tut mir Leid, dass ich nichts fertiges für dich habe, aber vielleicht wird das ja noch für die Zukunft. Der Projektplan für AntMe ist leider richtig, richtig lange...

Beste Grüße
Tom


Na ja, das dürfte die Frage doch zum Großteil beantworten.

Ich lass den Thread aber noch offen, vielleicht findet sich ja doch noch was!
VuuRWerK
VuuRWerK 07.07.2010 um 11:32:00 Uhr
Goto Top
Hm, so einfach wie Tom es beschreibt funktioniert es leider nicht, wegen der Sicherheitsbeschränkungen von AntMe! ;)
Hättest Du was dagegen wenn ich mich einfach mal, bezugnehmend auf Deine E-Mail, an Ihn wende mit eben meiner Erkenntnis darüber und meiner Beispiel-Implementierungen?

Gut Schuß
VuuRWerK ;)
Hacker
Hacker 07.07.2010 um 15:24:57 Uhr
Goto Top
Nein, mir ist es sogar sehr recht, wenn mir ein Spezi den Rücken deckt! Leider besteht meine ganze Erfahrung mit dem .NET-Framework aus einem knapp 800 Seiten dicken Buch.
VuuRWerK
VuuRWerK 08.07.2010 um 14:30:27 Uhr
Goto Top
So, hab mich mal mit dem Tom in Verbindung gesetzt, mal sehen ob wir ins Gespräch kommen face-smile

Gut Schuß
VuuRWerK ;)