Forum: PC-Programmierung Mosquitto MQTT Library in Visual Studio C++ nutzen


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 testuser (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich versuche seit einiger Zeit die mosquitto library, mit der man die 
MQTT Funktionalität integrieren kann, im Visual C++ Express zum Laufen 
zu bringen.
Ich habe es zuvor mit Bloodshed Dev-C++ ohne Probleme hinbekommen. Ich 
habe dazu die header-Datei eingebunden und dem Linker die lib Datei zur 
Verfügung gestellt.

Ich hatte es mir im Visual Express ähnlich einfach vorgestellt, 
allerdings bekomme ich zu jeder eingebundenen Funktion aus dem header 
die folgende Fehlermeldung:

"mosquitto_sub_topic_check": Ist als __declspec(dllimport) markiert. 
Beim Importieren einer Funktion muss eine systemeigene Aufrufkonvention 
angegeben werden.

Wenn ich dann auch noch eine Funktion aufrufe, kommt:

1>test.obj : error LNK2031: p/invoke konnte nicht für ""extern "C" int 
__clrcall mosquitto_lib_init(void)" (?mosquitto_lib_init@@$$J0YMHXZ)" 
generiert werden. In den Metadaten fehlt die Aufrufkonvention.
1>test.obj : error LNK2028: Nicht aufgelöstes Token (0A000036) ""extern 
"C" int __clrcall mosquitto_lib_init(void)" 
(?mosquitto_lib_init@@$$J0YMHXZ)", auf das in Funktion ""int __clrcall 
main(cli::array<class System::String ^ >^)" 
(?main@@$$HYMHP$01AP$AAVString@System@@@Z)" verwiesen wird.
1>test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes 
Symbol ""extern "C" int __clrcall mosquitto_lib_init(void)" 
(?mosquitto_lib_init@@$$J0YMHXZ)" in Funktion ""int __clrcall 
main(cli::array<class System::String ^ >^)" 
(?main@@$$HYMHP$01AP$AAVString@System@@@Z)".

Hat das schon mal jemand gemacht bzw. kann mit den Fehlermeldungen etwas 
anfangen. Ich habe schon etliche Webseiten und Foren durchforstet, 
allerdings konnte ich daraus nicht allzu viel für mein Problem daraus 
ableiten.

Gruß

testuser

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
testuser schrieb:
> Hat das schon mal jemand gemacht bzw. kann mit den Fehlermeldungen etwas
> anfangen. Ich habe schon etliche Webseiten und Foren durchforstet,
> allerdings konnte ich daraus nicht allzu viel für mein Problem daraus
> ableiten.

du hast vermutlich ein falsches Projekt angelegt.

Das ist keine C++ sondern CLI. (also C++ + .NET ).

Du musst ein echtes C++ Projekt anlegen, wenn du es nicht kannst, hast 
du die falsche Express Edition.

von testuser (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich glaube du hast Recht, ich habe unter VisualC++ -> CLR eine Windows 
Forms Anwendung angelegt, weil ich ein GUI haben wollte.

Wenn das falsch ist, wie kann ich dann die Library mit einer GUI 
Anwendung nutzen?

So ganz blicke ich da noch nicht durch...

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Indem Du eine C++-Klassenbibliothek für GUI-Anwendungen nutzt.

Microsoft selbst stellt dafür die MFC zur Verfügung, aber es gibt auch 
andere, wie Qt oder wxWidgets. Beide lassen sich auch mit Visual Studio 
verwenden, müssen aber separat installiert werden.

"Windows Forms" aber ist nicht mit C++ verwendbar, wie alle anderen 
.Net-Dinge auch.

Rein prinzipiell kann man natürlich auch native DLLs aus dem 
.Net-Geraffel heraus nutzen, hat dann aber einen Schichtkuchen an 
"interop"-Layern und anderem kaum debugbaren Kram an der Backe.

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
testuser schrieb:
> Wenn das falsch ist, wie kann ich dann die Library mit einer GUI
> Anwendung nutzen?

ich kenne die Mosquitto lib nicht. Aber auch unter .net (C# oder C++ 
CLI) kann man Funktionen aus einer Dlll nutzten.

Bei C++ gibt es die MFC (ich glaube aber nicht in der Express Edition) 
damit kann man auch eine GUI bauen.


Ich würde mit C# die GUI machen und die Funktionen aus der Dll 
einbinden.
https://msdn.microsoft.com/de-de/library/cc431203.aspx


Man könnte auch C++ und QT oder ähnliches verwenden, kommt halt darauf 
an was du kannst. C++ würde ich zumindest nicht mehr bei einer GUI 
verwenden, das ist alles irgendwie umständlich.

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
scheinbar gibt es das auch direkt für C++ CLI (oder C#)

https://m2mqtt.wordpress.com/m2mqtt_doc/

dann brauchst du nicht die dll.

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Peter II schrieb:
> (ich glaube aber nicht in der Express Edition)

Da nicht, aber in der ebenfalls kostenlosen "Community Edition".

von testuser (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Das ging ja fix mit den Antworten. Vielen Dank dafür.

Jetzt habe ich wieder einige Punkte an denen ich ansetzen kann, aber im 
Großen und Ganzen scheinen mir ein paar Basics zu fehlen.

Mal schauen wie weit ich komme...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.