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


von testuser (Gast)


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)


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)


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) Benutzerseite


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)


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)


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) Benutzerseite


Lesenswert?

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

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

von testuser (Gast)


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

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.