Forum: PC-Programmierung Hilfe bei einem Projekt


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Pascal B. (mini12345)


Angehängte Dateien:

Lesenswert?

Hallo, ich habe eine Kamera Slider Projekt nachgebaut. (open source)
Der Slider wird über den Seriellen Monitor oder per Bluetooth über das 
Handy über eine Konsole bewegt.
Das geht auch einwandfrei.

Jetzt hat der Ersteller aber einen Xbox Controller für die Steuerung 
benutzt, dazu hat er eine main.cpp Datei mitgegeben.
Dieser Code soll auf dem Rechner laufen, die Befehle vom Controller 
entgegen nehmen und dann irgendwie Seriell an den Arduino senden.

Da liegt aber mein Problem, ich weis nicht mal welche Vorlage ich im 
Visual Studio nehmen muss.... Konsolen-app Windows-Desktopassistent oder 
was auch immer.
Muss ich den Code überhaupt im Visual Studio öffnen?

Wenn ich den Code mit rechtsklick öffnen mit Visual Studio öffne und auf 
ausführen drücke will er dass ich es irgendwo anhänge und zeigt mir 
sämtliche .exe auf meinem Rechner an.

Ich bin da überfordert, kann mir hier einer Tipps geben ?

Ich hänge mal den Code an und das ganze Projekt verlinke ich .
Ganzes Projekt:
https://github.com/isaac879/Pan-Tilt-Mount

Xbox Controller Code:

: Verschoben durch Moderator
von Sebastian R. (sebastian_r569)


Lesenswert?

Vor dem Ausführen musst du deinen Sourcecode noch kompilieren.
Hast du einen C++-Compiler im Visual Studio eingepflegt?

von Rolf (rolf22)


Lesenswert?

Pascal B. schrieb:
> ich weis nicht mal welche Vorlage ich im
> Visual Studio nehmen muss.... Konsolen-app Windows-Desktopassistent oder
> was auch immer.

Visual Studio ist nichts für Anfänger. Zwar geht alles ganz simpel auf 
Knopfdruck, aber es gibt zu viele Knöpfe. Nimm stattdessen Visual Studio 
Code, das ist ein völlig anderes Produkt.

Dann such im Netz ein Tutorial dazu.

> Muss ich den Code überhaupt im Visual Studio öffnen?

Wenn du ihn nicht ändern oder lesen willst, musst du ihn nirgendwo 
öffnen. Aber du musst ihn compilieren, dabei wird eine EXE-Datei 
erzeugt, die lässt sich dann (hoffentlich) ausführen.

von Rolf M. (rmagnus)


Lesenswert?

Pascal B. schrieb:
> Da liegt aber mein Problem, ich weis nicht mal welche Vorlage ich im
> Visual Studio nehmen muss.... Konsolen-app Windows-Desktopassistent oder
> was auch immer.

Der Code sieht danach aus, dass er als C++-Konsolen-Anwendung für 
Windows gedacht ist. Das solltest du also in Visual Studio als Vorlage 
verwenden, dann den dortigen Code durch diesen ersetzen. Dann kannst du 
versuchen, das Projekt zu bauen, um ein .exe-File daraus zu generieren.

Sebastian R. schrieb:
> Hast du einen C++-Compiler im Visual Studio eingepflegt?

Ist sowas nicht bei Visual Studio dabei?

Rolf schrieb:
> Nimm stattdessen Visual Studio Code, das ist ein völlig anderes Produkt.

Bei dem ist definitiv kein Compiler dabei. Man braucht also erst mal 
zusätzlich noch eine Compiler-Toolchain und muss sich dann selbst darum 
kümmern, wie man die verwendet, um das Programm zu bauen. Das dürfte für 
einen Anfänger, der nur aus fertigem Code was ausführbares machen will, 
deutlich schwieriger sein.

von Oliver S. (oliverso)


Lesenswert?

Rolf schrieb:
> Visual Studio ist nichts für Anfänger. Zwar geht alles ganz simpel auf
> Knopfdruck, aber es gibt zu viele Knöpfe. Nimm stattdessen Visual Studio
> Code, das ist ein völlig anderes Produkt.

Visual Studio Code ist ein Editor, keine IDE. Da musst du die ganzen 
Knöpfe, die das Studio automatisch für dich drückt, erst einmal manuell 
anlegen, damit dann hinten irgendwo ein compiliertes Windowsprogramm 
rauskommt. DAS ist definitiv nichts für Anfänger.

Oliver

von Pascal B. (mini12345)


Lesenswert?

Danke erstmal für die Hilfeversuche,
Ja bei Studio ist der Compiler dabei, bei dem VS Code nicht. Dennoch 
habe ich mir jetzt das VS Code angeschaut und 2 verschiedene Compiler 
eingerichtet. Leide bin ich nicht weiter gekommen.

Ich gehe ja stark davon aus dass der Code funktioniert, erstens weil er 
den Controller ja im Video benutzt und zweitens weil bei dem Projekt 
alles gut durchdacht ist und bisher alles von ihm funktioniert hatte.

Jetzt musste ich aber im VSCode
#include <math.h>
hinzufügenen und jetzt mekert er bei
undefined reference to `XInputGetState'

dwResult = XInputGetState(i, &state); //Simply get the state of the 
controller from XInput.


obwohl der Befehl ja selbst auf der Windows Seite so steht .

Ich glaube das Problem liegt bei mir und nicht am Code, evtl könnte 
einer von euch der mehr Erfahrung hat mal versuchen den Code zu 
Compilern?

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Pascal B. schrieb:

> Jetzt musste ich aber im VSCode
> #include <math.h>
> hinzufügenen und jetzt mekert er bei
> undefined reference to `XInputGetState'

Das hat beides sicher nicht direkt etwas miteinander zu tun. Vor dem 
Include von math.h wird es sicher auch schon reichlich Fehler gegeben 
haben. Das Includen von math.h hat sehr wahrscheinlich nur dafür 
gesorgt, dass der Compiler bei seiner Arbeit etwas weiter kommt und 
damit die nächsten Fehler überhaupt erst sichtbar werden. Ohne die 
math.h hat er halt schon füher wegen Hoffnungslosigkeit abgebrochen...

Die fehlende Funktion ist übrigens in xinput.h deklariert. Ist die in 
der C-Datei included, wo sie benutzt wird?
Und: Kann der Linker die lib finden, die diese Funktion enthält?

von Pascal B. (mini12345)


Lesenswert?

Scheinbar findet er sie. In vs Studio kann ich den Code auch ohne math.h 
ausführen,nur will er da wie gesagt dass ich es an eine exe anhänge. Ich 
hab dann mal die arduino IDE gewählt und irgendwas läuft dann . 
Allerdings passiert nichts weitet.
Weder wenn ich am Controller was mache noch diese text Ausgaben ....

von Oliver S. (oliverso)


Lesenswert?

Ob S. schrieb:
> Die fehlende Funktion ist übrigens in xinput.h deklariert. Ist die in
> der C-Datei included, wo sie benutzt wird?
> Und: Kann der Linker die lib finden, die diese Funktion enthält?

Ein „undefined reference“ ist üblicherweise ein linkerfehler. Was dann 
zu der Frage führt, welcher Compiler da wie und wo installiert wurde.

Oliver

: Bearbeitet durch User
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Oliver S. schrieb:

> Ein „undefined reference“ ist üblicherweise ein linkerfehler.

Jepp. Vorher führt das höchstens zu einer Warnung bzgl. impliziter 
Deklaration (wenn halt die entsprechende *.h nicht included ist).

> Was dann
> zu der Frage führt, welcher Compiler da wie und wo installiert wurde.

Und wohl auch: Was eigentlich das Target sein soll...

von J. S. (jojos)


Lesenswert?

Ob S. schrieb:
> Oliver S. schrieb:
>> Ein „undefined reference“ ist üblicherweise ein linkerfehler.
>
> Jepp. Vorher führt das höchstens zu einer Warnung bzgl. impliziter
> Deklaration (wenn halt die entsprechende *.h nicht included ist).

Nein. Das ist ein Fehler den der Compiler schon anmeckert (wenn die 
Deklarieration fehlt).

: Bearbeitet durch User
von Pascal B. (mini12345)



Lesenswert?

vielleicht sollten wir bei visual Studio 2022 bleiben, denn da komme ich 
denke ich weiter.
Ich habe nun mal Bilder gemacht. Ich habe die main.cpp mir rechtsklick 
öffnen mit geöffnet.

Leider weis ich nicht was der mit anhängen will und auch nicht wo die 
Textausgaben wie z.b. " Controller nicht verbunden" kommen sollten.

Jedenfalls macht er da mal irgendwas.

von J. S. (jojos)


Lesenswert?

Mit Anfügen (Attach) wird der Debugger an den Ausgewählten Prozess 
angehängt, das möchtest du nicht. Da muss das Erstellen des Projektes 
ausgewählt werden, eventuell sind die Projekteinstellungen falsch. War 
da keine .sln bei oder ein makefile oder CMakeLists.txt?

von Rolf (rolf22)


Lesenswert?

Oliver S. schrieb:
> Visual Studio Code ist ein Editor, keine IDE. Da musst du die ganzen
> Knöpfe, die das Studio automatisch für dich drückt, erst einmal manuell
> anlegen, damit dann hinten irgendwo ein compiliertes Windowsprogramm
> rauskommt.

Ach so, ja: Du musst noch eine Extension installieren. Die 
Extensions-Liste zeigt VS Code an. Dann ist es kaum mehr als ein Klick 
und schon hast du eine IDE.

> DAS ist definitiv nichts für Anfänger.

Ich hatte ja "Tutorial" gesagt. Dieses zum Beispiel:
https://code.visualstudio.com/docs/cpp/config-msvc

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

J. S. schrieb:

> Nein. Das ist ein Fehler den der Compiler schon anmeckert (wenn die
> Deklarieration fehlt).

Das kommt auf die Compiler-Optionen an. Und die konkrete Fehlermeldung 
oder -warnung hängt natürlich auch vom Compiler ab.

Um also genaueres sagen zu können, müsste man erstmal wissen, welchen 
der TO eigentlich verwendet...

von Rolf (rolf22)


Lesenswert?

J. S. schrieb:

>> Ein „undefined reference“ ist üblicherweise ein linkerfehler.

> Nein. Das ist ein Fehler den der Compiler schon anmeckert (wenn die
> Deklarieration fehlt).

Es gibt auch implizite Deklarationen. Wie der Compiler das handhabt, 
kommt auf seine Einstellungen an.

Und wenn man z. B. eine "extern" Deklaration in einer .cpp hat, merkt es 
erst der Linker, wenn eine fehlende Definition fehlt. Und was sagt der 
dann? Richtig, er sagt (sinngemäß) "undefined reference", was sonst?

von J. S. (jojos)


Lesenswert?

deshalb steht da in Klammern 'wenn die Deklaration fehlt'. Es ist ein 
.cpp Datei die damit üblicherweise als C++ Quelle übersetzt wird, und da 
ist eine fehlende Deklaration ein Fehler und keine Warnung. Und schon 
das ist ein großer Vorteil bei C++ das es in der Sprache so festgelegt 
ist, nix Compileroption.

von J. S. (jojos)


Lesenswert?

Pascal B. schrieb:
> Ich hänge mal den Code an und das ganze Projekt verlinke ich .
> Ganzes Projekt:
> https://github.com/isaac879/Pan-Tilt-Mount

ok, da sind keine weiteren Projektdateien oder makefiles drin. Es gibt 
ein anderes YT Video wo im 2. Teil die SW beschrieben werden sollte, das 
ist aber nie erschienen.

Edit:
in einem der Issues im Repo wird auf ein Python Projekt verwiesen, das 
könnte da einfacher zu benutzen sein. Zu dem Windows Programm gab es nie 
Anweisungen.
https://github.com/cbradburne/Pan-Tilt-Mount-App

: Bearbeitet durch User
von Pascal B. (mini12345)


Lesenswert?

nun, ich danke euch allen wirklich herzlich für die versuchte 
Hilfe!Scheinbar kann aber auch von euch keiner was mit der main.cpp 
anfangen.

Der Slider funktioniert wirklich gut und steht auch fertig aufgebaut 
neben mir. Allerdings ohne externen Controller für mich "fast 
"unbrauchbar weil die Konsole Steuerung(und ds auch noch per handy) echt 
nervig ist!

D.h. wir (eher Ich) brauchen einen der Ahnung von sowas hat.

Wenn dass einer über TeamViewer o.ä machen kann ist das auch kein 
Problem, muss auch nicht umsonst sein.

Danke euch.

von Εrnst B. (ernst)


Lesenswert?

Beachte diese Zeile im Quelltext, und den Kommentar dahinter.
1
//#pragma comment(lib, "XInput.lib")   // Library. If your compiler doesn't support this type of lib include change to the corresponding one

Entweder die Zeile aktivieren, wenn dein Compiler das unterstützt, oder 
XInput eben über Projektoptionen, Linker-Commandozeile, 
Makefile-Variable o.Ä. hinzulinken.

von Pascal B. (mini12345)


Lesenswert?

ja, hab ich gelesen. Aber die XInput hat er doch und meckert auch nicht 
.

von Frank L. (florenzen)


Angehängte Dateien:

Lesenswert?

Ich habe aus deinem Code mal eine exe gebaut.
Schau mal ob es das macht was du erwartest.


Gruß,
f

von J. S. (jojos)


Lesenswert?

ich habe auch nochmal probiert das zu übersetzen, es geht mit VSC, 
braucht aber den MSC Compiler aus dem VS.
In einer VS Developer Shell den VSC mit 'code' starten, dann das 
main.cpp laden. Durch Debugger starten wird eine Compiler Task erzeugt 
und gestartet. Jetzt war noch nötig die 'User32.lib' genau wie die 
'Xinput.lib' über das pragma auch dem Linker bekannt zu machen.

Ich habe es mit einem PS3 Controller probiert, dazu sind noch Treiber
https://github.com/nefarius/ScpToolkit/releases/tag/v1.6.238.16010
nötig.

Ich habe keinen Arduino dran, aber mal die Aufrufe von panTiltInit() und 
printIncomingData() auskommentiert, dann läuft eine Ausgabe einiger 
Inputs durch und die werden auch mit dem linken Joystick verändert.

Cooles Projekt, finde ich auch sehr interessant.

Es müsste auch mit dem llvm/clang zu übersetzen sein, ich hatte mal mit 
CMake eine Konfig erzeugt und ein einfaches Konsolenprogramm übersetzt, 
ging auch. Nur MS erlaubt nicht dafür die CPP Extension zu benutzen, ein 
Hinweis kommt beim Debugger starten. Vielleicht fehlt daher auch was im 
Repo. Aber den VS für C++ gibt es afaik ja auch als kostenlose Community 
Edition.

: Bearbeitet durch User
von Pascal B. (mini12345)


Lesenswert?

besteht irgendwie die Möglichkeit dass du es bei mit über TeamViewer 
auch ans laufen bringst? Ich würde dann alles vorbereiten 
(dateien,programme usw.)

Und Frank, die Exe kann ich nicht öffnen weil Windows meckert es sei ein 
Virus.

von Frank L. (florenzen)


Lesenswert?

Pascal B. schrieb:

[...]
> Und Frank, die Exe kann ich nicht öffnen weil Windows meckert es sei ein
> Virus.

Ist ja lustig :-)
Das ist die main.cpp aus deinem ersten Beitrag, ergänzt um ein weiteres 
#pragma für User32.lib, compiliert mit dem MSVC-BuildTools 2019 'cl' für 
eine x64 Zielplatform.
Es ist halt nicht signiert. Evtl. stört sich Windows daran.

Gruß,
f

von Pascal B. (mini12345)


Angehängte Dateien:

Lesenswert?

Ja Frank, das soll kein Vorwurf oder sowas sein. Wollte nur sagen dass 
ich die leider nicht testen kann.

von Frank L. (florenzen)


Lesenswert?

Keine Sorge, ich habe das nicht als Vorwurf aufgefasst.
Vielleicht kann dir Jojos ja weiterhelfen, der scheint ja auch einen 
XBox-Controller zu haben und an dem Projekt interessiert zu sein. Ich 
habe lediglich den Code durch den Compiler gejagt und kann weiter nichts 
tun da ich die notwendige Hardware gar nicht habe.

Gruß,
f

von Pascal B. (mini12345)


Lesenswert?

Ja beim Compilieren könntest du mir natürlich auch helfen. :-D

von Oliver S. (oliverso)


Lesenswert?

J. S. schrieb:
> Ob S. schrieb:
>> Oliver S. schrieb:
>>> Ein „undefined reference“ ist üblicherweise ein linkerfehler.
>>
>> Jepp. Vorher führt das höchstens zu einer Warnung bzgl. impliziter
>> Deklaration (wenn halt die entsprechende *.h nicht included ist).
>
> Nein. Das ist ein Fehler den der Compiler schon anmeckert (wenn die
> Deklarieration fehlt).

Die Compilerbauer geben sich sehr viel Mühe, eindeutige und 
unverwechselbare Fehlermeldungen zu erzeugen. Eine fehlende Definition 
gibt ein unknown oder undefined function vom Compiler, der Linker wirft 
das undefined reference bei fehlendem Symbol.

Wenn der TO das also richtig hingeschrieben hat, wars der linker.

Olivet

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Oliver S. schrieb:
> Wenn der TO das also richtig hingeschrieben hat, wars der linker.

MS-Compiler geben zusätzlich zum Klartext der Fehlermeldung auch eine 
eindeutige Nummer mit einem Buchstabenkürzel davor.

Hier entweder LNK2001 (unresolved external symbol "symbol") oder LNK2019 
(unresolved external symbol 'symbol' referenced in function 'function').

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.