Mosquitto MQTT Library in Visual Studio C++ nutzen

Gast #4809275
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
Gast #4809279
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.
Gast #4809317
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...
Persönliche Seite #4809326
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.
Gast #4809327
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.
Gast #4809351
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren