Reflection Dateiübergreifend?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

M0rgenstern

Betreff: Reflection Dateiübergreifend?

BeitragMi, Jul 18, 2012 11:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,

Ich habe gerade ein ziemliches Problem:
Ich habe ein Programm geschrieben, das aus .bmx Dateien automatisch Klassennamen ausliest.
Dann möchte ich über die Klassennamen mit BlitzMax: [AUSKLAPPEN]
TTypeId.ForName
die Eigenschaften der Klasse auslesen.
Aber das TTypeID Objekt bleibt null, also mein Programm schmiert mit einem Fehler ab, dass das TTypeID Objekt null ist.
Ich gehe mal stark davon aus, dass er Probleme damit hat, wenn die Klassen nicht in der gleichen Datei liegen.

Kann man das irgendwie umgehen oder so? Also was nacher gehen soll ist, dass man eine beliebige Blitzmkax datei lädt und er alle Klassen ausliest und per reflection darauf zugreifen kann.

Wäre super, wenn mir jemand helfen könnte.

Lg, M0rgenstern
  • Zuletzt bearbeitet von M0rgenstern am Mi, Jul 18, 2012 15:48, insgesamt einmal bearbeitet

ZEVS

BeitragMi, Jul 18, 2012 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzMax ist keine Skriptsprache. Du kannst nicht einfach zur Laufzeit Dateien einbinden.
Reflection kann nur mit Dateien funktionieren, die mittels Include oder Import eingebunden wurden und somit Teil der Executable sind. Bei Dateien, die erst zur Laufzeit geöffnet werden, ist der Type natürlich nicht verfügbar. Wenn dein Programm es aber schafft, die Type-Namen auszulesen, solltest du auch in der Lage sein, es so zu erweitern, dass es auch Methoden- und Feldnamen auslesen kann.

ZEVS

M0rgenstern

BeitragMi, Jul 18, 2012 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay.
Stimmt schon. Momentan hab iches auch so lösen können.
Das Problem ist nur, dass ich nicht alles so lösen kann.
Ich bin nämlich dabei, für dieses Modul eine GUI zu schreiben, mit der man in Codedateien automatisch nach Tests suchen lassen kann und die Tests dann starten lassen kann.
Das Problem ist halt einfach, dass man ja in dem Programm jede beliebige BlitzMax-Codedatei laden kann und diese nach Tests durchsuchen lassen kann.

Der Button zum Starten der Tests macht das dann so:
BlitzMax: [AUSKLAPPEN]
Function StartTests()
Local list:TList = New TList
'Alle Klassennamen in die Liste.
For Local cf:TCodeFile = EachIn CodeFiles
For Local tc:TTestClass = EachIn cf.TestClasses()
list.AddLast(tc.ClassName())
Next
Next

'Tests starten
TUnitTestProvider.SetUpUnitTesting(list)
TUnitTestProvider.StartUnitTesting(CurrentDir() + "/log.logs/UnitTestsLog.log")
End Function


Un der TUnitTestProvider macht dann folgendes mit der Liste:
Er geht durch die Liste der Typnamen und übernimmt die Namen der Klassen in seine eigene Liste (in SetUpUnitTesting).
In StartUnitTesting legt er dann eine Liste an, in der er alle Methoden der Klasse speichern soll, um diese dann aufzurufen (per reflection).

Das Problem ist halt, dass er dann an folgender Stelle abschmiert:
BlitzMax: [AUSKLAPPEN]
'For each class in the list.
For Local name:String = EachIn TypeNameList
'Get the Type id of the current class.
CurrentTypeID = TTypeId.ForName(name)
Local Methods:TList = CurrentTypeID.Methods() 'HIER


Und ich suche jetzt halt eine Möglichkeit, das so zu gestalten, dass das funktioniert.

Lg, M0rgenstern

Xeres

Moderator

BeitragMi, Jul 18, 2012 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie soll das ablaufen?
Man wählt in deinem Programm ein Codefile aus und dass soll getestet werden? Dann musst du den BlitzMax Compiler an werfen und den Code vom Benutzer zu deinem speziellem Testcode hinzu kompilieren.
Nicht besonders elegant.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

M0rgenstern

BeitragMi, Jul 18, 2012 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm.
Also geht das wohl gar nicht so, wie ich mir das vorgestellt habe.
Verdammt.

Und wenn ich das folgendermaßen mache:
Alle Tests, die benutzt werden sollen, werden von dem Programm in eine Datei geschrieben. Die Datei muss dann halt einmal kompilert werden (kann man irgendwie den BlitzMax Compiler dazu veranlassen?) und eine Ergebnisdatei erstellen. Diese Ergebnisdatei kann dann vom Programm ausgelesen werden und die Fehler können im Programm angezeigt werden.

Lg, M0rgenstern

Xeres

Moderator

BeitragMi, Jul 18, 2012 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Klar kannst du den Compiler per CreateProcess anwerfen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group