Jump to content

Bindings --> DLLs


Recommended Posts

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?

 

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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 ;D

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...