Jump to content

Wie installiere ich die c++ Bindings?


Tyche
 Share

Recommended Posts

Moin... Nachdem ich in der SuFu nix gefunden habe, hier mal meine Geschichte:

 

Ich habe mir vor zwei Tagen den Tinkerforge gekauft. So, erst mal Brick-Viewer und Brick-Daemon installiert und alle Chips getestet. Die haben Funktioniert.

 

Heute wollte ich anfangen, mein erstes Programm zu schreiben, habe aber ein großes Problem:

 

Ich weiß nicht, wie ich diese Bindings installieren soll. Die readme kapiere ich leider nicht... Was ich gemacht habe: Ein Projekt ("Tinkerforge-Test") im Pfad C:\Users\Name\Desktop erstellt. Also habe ich nun die Datei schön auf dem Desktop. In der Datei, die ich runtergeladen habe, gab es eben diese readme, einen Haufen .c und .h Dateien. Diese .h Dateien sollen die Bindings sein, die .c sind Beispiele.

 

Ich habe zuerst alle .h und .c Dateien nach C:\Users\Name\Desktop\Tinkerforge-Test kopiert, danach ein .c Beispielprogramm gestartet. dann wollte ich das Programm starten, jedoch kam Folgende Fehlermeldung: Das Programm "C:\Users\Name\Desktop\Tinkerforge-Test\Debug\Tinkerforge-Test.exe" kann nicht gestartet werden. Das System kann die angegebene Datei nicht finden...

 

Kann mit da jmd. mit Ahnung helfen? Bei weiteren Fragen einfach melden ;) Danke

 

PS: Ich benutze Visual C++ 2010 Express

Link to comment
Share on other sites

Einfach im VisualStudio ein C++ Projekt erstellen.

Dann die Bindingklassen die du brauchst ins Projektverzeichnis kopieren.

Einbinden. Und vorher nicht vergessen. Bei den Bindingdateien jeweils unter Eigenschaften -> C++ ->Erweiter ->Kompilierungsart -> Als C++ Code kompilieren (/TP) auswählen.

Sonst bekommst du Fehler beim Kompilieren.

 

Zum Beispiel sind die Dateien für den Master die brick_master.c und die brick_master.h

Auf alle Fälle brauchst du auch noch die ip_connection.c und die ip_connection.h

Link to comment
Share on other sites

Also,

Erst mal danke für die Antwort.

Ich habe jedoch noch ein Problem:

Wenn ich jetzt z.B. auf die ip_connection.h rechtsklicke und dann auf Eigenschaften klicke, wird folgendes Fenster geöffnet:

 

http://s7.directupload.net/file/d/3078/8bk8ozek_png.htm

(Ich weiß leider nicht, wie ich Bilder hier einbinde ;)

 

Auf jeden Fall sehe ich nirgendwo etwas von C++ oder ähnliches...

Hätten Sie noch einen Rat?

Link to comment
Share on other sites

1: Lieber erst siezen bevor man nen schlechten Eindruck macht ;)

2: Die Grundlagen von C++ beherrsche ich (mehr oder weniger)

3: Die Dokumentation hilft mir i-wie nicht, da keine (für mich wichtigen) Bilder vorhanden sind...

 

EDIT: So... ich habe es, (so sieht es zumindest aus) alles so gemacht, wie gesagt.

Jetzt bekomme ich nur noch die Fehlermeldung [...] Das Programm kann die angegebene Datei nicht finden.

 

Und in der Konsole kommt folgendes:

 

1>------ Erstellen gestartet: Projekt: TF, Konfiguration: Debug Win32 ------

1>  example_stack_status.c

1>c:\users\daniel\desktop\examples\brick\master\example_stack_status.c(4): fatal error C1083: Datei (Include) kann nicht geöffnet werden: "ip_connection.h": No such file or directory

========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Link to comment
Share on other sites

Liegt die ipconnection.h im gleichen verzeichnis wie die example_stack_status.c?

 

Sieht so aus als wäre das nicht der Fall.

 

Ich rate grundsätzlich allen die keinen guten Grund haben C/C++ zu verwenden, es auch nicht zu nutzen.

Gute Gründe sind beispielsweise:

- die Zielplattform unterstützt keine höheren Sprachen (embedded Programmierung)

- enorme Kontrolle über Speicher/Laufzeit wird benötigt (moderne 3D Computerspiele)

 

Beim letzten Punkt kommt hinzu, dass man wirklich gut sein muss, um das ausnutzen zu können ^^

 

Für fast alle "normalen" Anwendungsfälle sollte man sich C++ nicht antun, weil es in höheren Sprachen einfach mehr Spaß macht zu programmieren und viele Fehler aus C++-Welt nicht möglich sind (genug lernen tut man dabei trotzdem). Aber der wichtigste Grund ist, dass es mehr Spaß macht und man deswegen mehr programmiert und mehr lernt ^^

Link to comment
Share on other sites

Jupp... da ich sowieso mal Spiele-Entwickler werden will, denke ich, ich könnte zumindest die Logik von C++ lernen.

 

Und, nein, ich hatte die ipconnection.h nicht im gleichen Verzeichnis wie die example_stack_status.c. Jetzt habe ich das gemacht, jedoch immer noch der gleiche Fehler.

 

Kann sich vllt. jemand mir erbarmen, und einen einfachen Projektordner, in dem alles funktioniert, hochladen?

Damit ich mir die Struktur angucken kann?

 

Wäre mir ne große Hilfe und ich könnte endlich mit meinem Projekt anfangen ;)

Link to comment
Share on other sites

@Nic: Damit meine ich, dass C++ noch ziemlich unabstrahiert ist, natürlich besser als Assembler ^^

 

@Tyche: Das meinte ich ja genau, C++ hat keine andere Logik als andere imperative Sprachen... Es ist nur schwerer zu verstehen, weil es bestimmte Details nicht so gut abstrahiert (was für Profis ein Vorteil sein kann). Aber einen Gefallen tust du dir damit definitiv nicht ^^

 

Zu deinem Fehler:

Du hast jetzt eine Zeile

#include "ipconnection.h"

(beachte die Anführungszeichen)

Und beide dateien liegen im gleichen Verzeichnis.

Und trotzdem kommt noch immer die Meldung: Datei (Include) kann nicht geöffnet werden: "ip_connection.h": No such file or directory?

 

Das halte ich für unwahrscheinlich....

Link to comment
Share on other sites

Hmmh, ev. hilft eines von vielen Tutorials z.B. auf youtube:

 

Ich frage mich manchmal, ob es nicht klüger gewesen wäre, von Beginn an in C zu programmieren, um so wertvolle Erfahrungen für das spätere OnDevice-Programming zu sammeln. Für den einen oder anderen Brick oder Bricklet fallen mir da so einige Erweiterungen der FW ein, die man doch gerne mal schnell selber schreiben würde.

Link to comment
Share on other sites

Also ich hab jetzt mal die ip_connection.h UND .c + die brick_master.h + .c und die example_stack_status.c in ein Verzeichnis (Quelldateien) rein, immer noch der gleicher Fehler.

Das

#include "ip_connection.h"

und das

#include brick_master.h

ist in der example_stack_status.c rot "unterstrichen" und es heißt, dass die Quelle nicht geöffnet werden kann...

 

Ich bin hier grade echt am verzweifeln...

 

*Hilferuf*

Link to comment
Share on other sites

Siehst Du im Solution Explorer des VisualStudios, die beiden Dateien ?

Über einen Button "ShowAll" kann man sich alle Dateien des Projektverzeichnisses anzeigen lassen.

Dateien die noch nicht dem Projekt hinzugefügt wurden, werden transparent dargestellt. Diese Dateien kann man per Rechtsclick und via "Include in Project" permanent hinzufügen. (Sorry meine Umgebung für C# läuft unter eng.) So mache ich das in C#, ev. reicht die Zeile mit dem Include noch nicht aus.

Auch wenn du hier eine einfache C-Datei hast, ist diese i.d.R. Bestandteil eines Projekts. In der Projektdatei sind Verknüpfungen und Referenz-Pfade hinterlegt.

Link to comment
Share on other sites

Hier mal ein gepacktes Projekt, das ich mit Visual Studio 2010 Professional erstellt habe.

Wenn du es mit Express nicht öffnen kannst, sag nochmal Bescheid, dann beschreibe ich dir kurz was du machen musst.

Das Beispiel schaltet ein Dual Relay einfach mehrmals nacheinander.

 

Wichtig ist den richtigen HOST und die richtige UID des Bricklets einzufügen.

Zusätzlich muss in den Projekteigenschaften unter Linker -> Eingabe -> Zusätzliche Abhängigkeiten noch die ws2_32.lib hinzugefügt werden, ansonsten klappt es mit der ipconnection nicht so wirklich gut.

 

Gib einfach kurz Rückmeldung, ob es dir hilft.

CPP-Konsole-TF.zip

Link to comment
Share on other sites

Ich könnte auch auf Python umsteigen, jedoch weiß ich auch dort nicht, wo die Bindings hingehören, die Dokumentation hilft mir leider  nicht weiter...

Also ich würde mich an Deiner Stelle für eine Sprache festlegen. Egal ob es nun sofort oder später klappt. Einen Eiertanz zw. den Hochsprachen zu machen, wird dich m.E. nicht wirklich weiterbringen.

Du möchtest später mal Spiele programmieren, also dann los mit C/C++. Aber zu Beginn laß den ganzen TF-Kram mal weg, und beginne ganz von vorne mit den elementarsten Dingen in VisualStudio und C++. Neues Projekt anlegen usw. ersten Code schreiben etc. Wenn das sitzt, versuch dich an den TF-Sachen in C++.

 

Hast du eins der Tutorials angeschaut ? Nu habe extra Filme rausgesucht und nix zum Lesen, damit es schneller hilft... ::)

 

PS: Ich sehe gerade in Deinem Screenshot, daß die Headerdateien unter dem Knoten Quelldateien aufgelistet sind. Sollten die nicht unter dem Knoten Headerdateien wandern ?

Clipboard01.png.bf6f02705476190bd79067db61f0094a.png

Link to comment
Share on other sites

Mein Tipp wäre es mit etwas anzufangen das auch getypt ist und wo die Syntax der von C++ ähnlich ist (C#, Java). Es spricht nichts dagegen später auch C++ zu lernen, aber damit anzufangen ist mit Sicherheit selbstgeißelei. (kein Anfänger hat es Verdient den Unterschied zwischen Variablen, Referenzen und Pointern verstehen zu müssen ^^)

 

edit: Der Trick ist, dass es mit Programmiersprachen so ist wie mit natürlichen Sprachen: Je mehr man spricht, desto leichter wird es eine Neue zu lernen. Deswegen sollte man mit den leichten beginnen, um erstmal die grundlegenden Konzepte zu verstehen. Nic: wenn ich dich richtig verstehe, dann kannst du ja schon programmieren und hast trotzdem nicht die Muße noch C zu lernen. Dann verstehe ich nicht wie du jemandem ohne Vorwissen gleichermaßen dazu raten kannst doch sofort damit zu beginnen.

Link to comment
Share on other sites

Hey :D

 

Ich habe etwas Vorwissen, ja ^^

Einfache Programme kann ich schon schreiben.

 

Es will aber immer noch nicht funktionieren...

Ich habe wirklich alles so gemacht, wie ihr gesagt habt:

 

Richtig hinzugefügt, alles ins richtige Verzeichnis, als C++ kompilieren...

 

EDIT: Ich bin jetzt ein Stückchen weitergekommen:

Er findet die Dateien endlich. Jetzt habe ich aber Folgende Fehlermeldungen in der Konsole: 

1>------ Erstellen gestartet: Projekt: Tinkerforge, Konfiguration: Debug Win32 ------
1>  example_stack_status.c
1>ip_connection.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__closesocket@4" in Funktion ""void __cdecl ipcon_destroy(struct IPConnection_ *)" (?ipcon_destroy@@YAXPAUIPConnection_@@@Z)".
1>ip_connection.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__shutdown@8" in Funktion ""void __cdecl ipcon_destroy(struct IPConnection_ *)" (?ipcon_destroy@@YAXPAUIPConnection_@@@Z)".
1>ip_connection.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__send@16" in Funktion ""void __cdecl ipcon_enumerate(struct IPConnection_ *,void (__cdecl*)(char *,char *,unsigned char,bool))" (?ipcon_enumerate@@YAXPAUIPConnection_@@P6AXPAD1E_N@Z@Z)".
1>ip_connection.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__connect@12" in Funktion ""int __cdecl ipcon_create(struct IPConnection_ *,char const *,int)" (?ipcon_create@@YAHPAUIPConnection_@@PBDH@Z)".
1>ip_connection.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__htons@4" in Funktion ""int __cdecl ipcon_create(struct IPConnection_ *,char const *,int)" (?ipcon_create@@YAHPAUIPConnection_@@PBDH@Z)".
1>ip_connection.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__gethostbyname@4" in Funktion ""int __cdecl ipcon_create(struct IPConnection_ *,char const *,int)" (?ipcon_create@@YAHPAUIPConnection_@@PBDH@Z)".
1>ip_connection.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__socket@12" in Funktion ""int __cdecl ipcon_create(struct IPConnection_ *,char const *,int)" (?ipcon_create@@YAHPAUIPConnection_@@PBDH@Z)".
1>ip_connection.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__WSAStartup@8" in Funktion ""int __cdecl ipcon_create(struct IPConnection_ *,char const *,int)" (?ipcon_create@@YAHPAUIPConnection_@@PBDH@Z)".
1>ip_connection.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0" in Funktion ""void __cdecl ipcon_receive_loop(void *)" (?ipcon_receive_loop@@YAXPAX@Z)".
1>ip_connection.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__recv@16" in Funktion ""void __cdecl ipcon_receive_loop(void *)" (?ipcon_receive_loop@@YAXPAX@Z)".
1>C:\Users\Daniel\Desktop\Tinkerforge\Debug\Tinkerforge.exe : fatal error LNK1120: 10 nicht aufgelöste externe Verweise.
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

 

Kann mir mal einer das auf verständlich übersetzen :D

Link to comment
Share on other sites

Ich habe wirklich alles so gemacht, wie ihr gesagt habt:

Hast Du das Beispiel-Projekt von rifmetroid probiert ?? ::)

 

Ich habe es getestet und das klappt sofort und ohne Probleme. Die Solution-Datei (*.sln) einfach per DragDrop in das VisualStudio ziehen. Dann in Datei CPP-Konsole-TF.cpp die Host Addresse und UID ändern und run.

 

Es will aber immer noch nicht funktionieren...

Sehr unspezifisch...

 

Ansonsten empfehle ich den Besuch spezieller Foren zu C/C++, ev. haben die dort produktivere Vorschläge.

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...