Plenz Geschrieben October 21, 2012 at 22:18 Geschrieben October 21, 2012 at 22:18 Ich kann mich mit Python nicht recht anfreunden, mit C noch weniger (wenn es um komplexe Aufgaben geht). Am liebsten programmiere ich in BASIC-Dialekten. Aber ein VB-Programm, das Bricklets ansteuern soll, braucht eine passende DLL. Nachdem ich nun das Beispielprogramm für den IO4 mit Hilfe von MingW zum Laufen gekriegt hatte, hatte ich versucht, es in die Aufgaben init, exit, input und output zu unterteilen und als DLL zu kompilieren. Natürlich ergebnislos, denn ich kriege nicht raus, wie ich die ganzen Komponenten einbinden soll. So kompiliert man eine einfache DLL: gcc -DBUILD_DLL -c test.c gcc -shared -o test.dll test.o test.def -Wl,--out-implib,testcmp.a So kompiliert man das Beispielprogramm: gcc -o example_configuration.exe brick_stepper.c ip_connection.c example_configuration.c -lws2_32 Aber wie kriege ich diese Vielzahl von C-Programmen in die zwei Kompilierungsaufrufe für die DLL eingebunden? Zitieren
AuronX Geschrieben October 22, 2012 at 07:42 Geschrieben October 22, 2012 at 07:42 Ich werde deine Frage beantworten indem ich sie nciht beantworte: Hast du es schonmal mit VB.Net probiert? Dort kannst du einfach* die C#-Bindings nutzen. * Das sollte prinzipiell laufen, aber an den Stellen schiefgehen, an denen du innerhalb der Aufrufe unsigned Variablen brauchst (weil VB.NET die nciht nutzen kann). Ist auch ein recht altes Thema... Vielleicht sollte ich mich da nochmal an einen Generator setzen, der vollständig VB.NET-kompatible Bindings erstellt. Zu deiner konkreten gcc-Frage kann ich dir leider nciht groß helfen. Ich finde die meisten klassischen Compiler gruselig und habe Angst sie tun mir weh! Zitieren
Plenz Geschrieben October 22, 2012 at 11:22 Autor Geschrieben October 22, 2012 at 11:22 Eigentlich programmiere ich nicht in VB (höchstens mal VBA für Excel), sondern in Rapid-Q. Das ist für kleine Projekte ideal, weil es einen nicht zwingt, sich mit Modulen und Modulgrenzen auseinanderzusetzen und weil das gesamte Projekt mitsamt den Definitionen für Form, Buttons, Schiebereglern etc. mitsamt dem Code in einer einzigen Datei abgespeichert werden kann. Und ich mag DLLs. Ich habe mich schon sehr ungern mit Python beschäftigt, nur weil ich mangels DLLs meine Bricks zum Laufen bringen wollte. Aus dem selben Grund nun in VB.Net einzusteigen, scheint mir genau so wenig verlockend. Momentan benutze ich für ein Projekt ein Rapid-Q-Programm, das meinen Input auswertet und Befehle für das IO4-Bricklets generiert und als kurze Textdatei ablegt, sowie ein primitives Python-Programm, das diese Dateien einliest und das Bricklet steuert. Funktioniert, aber es ist im Grunde genommen Krampf, auch wenn es viel besser läuft als mein Versuch, das alles in einem Python-Programm zu realisieren. Ich muss nur rauskriegen, wie ich den GCC aufrufe, und das Thema ist gegessen. Zitieren
Plenz Geschrieben October 22, 2012 at 21:00 Autor Geschrieben October 22, 2012 at 21:00 Ich hab's jetzt anders gelöst: einfach den Text aus ip_connection.c und bricklet_io4.c in mein Programm reinkopiert und doppelte Definitionen gelöscht. Ich habe auch den Versuch aufgegeben, init und exit getrennt aufzurufen, init-output-exit in einem Rutsch geht schnell genug. Die DLL ist zwar über 777 kB groß, aber sie funktioniert Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.