MSVC2008コンパイラを使用してQTでAFX_MSGを使用します
-
28-10-2019 - |
質問
タイトルが示すように、MSVC2008コンパイラを使用してQTのプロジェクトに取り組んでいます。
私が作業しようとしているサンプルコードは、AFX_MAPSを利用しています。そして、私が知る限り(私は実際にAFXの仕組みを実際に持っていません)、以下のコードはメッセージwm_pi_rawdata_readyを受信したとき(私はそれがどこまたはどのように受信されるかわかりません)、関数onrawdatareadyがトリガーされます。
//{{AFX_MSG_MAP(CPDImfcDlg)
ON_MESSAGE(WM_PI_RAWDATA_READY, OnRawDataReady )
//}}AFX_MSG_MAP
プロジェクトにコードをコピーしてから、ヘッダーに#includeを追加しようとしましたが、次のエラーが得られます。
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]
これについて私が他の場所で見つけた修正は、Visual Studioのプロジェクト設定のように思われるので、それを回避する方法がわかりません。
これを修正する方法、またはAFX_MSGのものを回避する方法に関するアイデアはありますか?
どうもありがとう
解決
エラーメッセージが言ったことをするだけで #define
ing _AFXDLL
プリプロセッサシンボル。ビルド環境に応じて、引数としてコンプライアコマンドラインに追加する必要があります(/D_AFXDLL
, 、 私が正しく覚えていれば)。しかし、QTで作業しているとき、とにかく *.proファイルを手に入れて、そこに追加することができます(を使用して DEFINES
変数)。したがって、この行をあなたに追加するだけです *.proファイル
DEFINES += _AFXDLL
ただし、MFCコードをQTアプリケーション(2つのまったく異なるGUIおよびOS抽象化ライブラリ)に統合するだけでは、デザインの問題を話すのではなく、どちらもうまく機能しないため、あまり役に立ちません。おそらく、アプリケーションをMFCからQTに移植することができます。
他のヒント
基本的に、静的ライブラリまたはDLLを使用する必要があると言います。混ぜることはできません。
あなたが言うように、これはプロジェクト設定の一部です。