Verwenden Sie AFX_MSG in QT mit MSVC2008 Compiler
-
28-10-2019 - |
Frage
Ich arbeite an einem Projekt in QT mit dem MSVC2008 -Compiler, wie der Titel sagt.
Der Beispielcode, aus dem ich arbeiten möchte, nutzt AFX_MAPS. Ich habe keine Ahnung, wo oder wie es empfangen wird), die Funktion onrawdataready wird ausgelöst.
//{{AFX_MSG_MAP(CPDImfcDlg)
ON_MESSAGE(WM_PI_RAWDATA_READY, OnRawDataReady )
//}}AFX_MSG_MAP
Ich habe versucht, den Code in mein Projekt zu kopieren und dann #include in den Header hinzugefügt, aber er gibt mir den folgenden Fehler:
D:\Program Files\Microsoft Visual Studio 9.0\VC\ATLMFC\INCLUDE\afx.h:24: error: C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
Die Korrekturen, die ich an anderer Stelle für diese Projekteinstellungen in Visual Studio zu sein scheinen, bin ich mir nicht sicher, wie ich es umgehen soll.
Irgendwelche Ideen, wie man dies behebt oder wie man das AFX_MSG -Zeug herumarbeitet?
Danke vielmals
Lösung
Was ist mit dem, was die Fehlermeldung gesagt hat und #define
das _AFXDLL
Präprozessorsymbol. Abhängig von Ihrer Build -Umgebung müssen Sie sie nur zur komplizierenden Befehlszeile als Argument hinzufügen (Argument (/D_AFXDLL
, wenn ich mich richtig erinnere). Aber wenn Sie mit QT arbeiten DEFINES
Variable). Fügen Sie also diese Zeile Ihnen *.Pro -Datei hinzu
DEFINES += _AFXDLL
Aber nur die Integration von MFC -Code in eine QT -Anwendung (die zwei völlig unterschiedliche GUI- und OS -Abstraktionsbibliotheken sind) wird jedoch nicht zu viel helfen, da beide nicht so gut zusammenarbeiten, um nicht über das Designproblem zu sprechen. Vielleicht können Sie die Anwendung von MFC nach QT portieren.
Andere Tipps
Es heißt im Grunde, dass Sie entweder statische Bibliotheken oder DLLs verwenden müssen. Sie können sich nicht mischen.
Wie Sie sagen, ist dies Teil der Projekteinstellungen.