2011-06-14 2 views
0

제목에 나와있는대로 msvc2008 컴파일러를 사용하여 Qt 프로젝트를 진행하고 있습니다.msvc2008 컴파일러와 함께 Qt에서 afx_msg 사용

내가 작업하려고하는 샘플 코드는 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] 

수정 프로그램을 비주얼 스튜디오의 프로젝트 설정이기 때문에 어떻게해야할지 모르겠다.

이 문제를 해결하는 방법이나 afx_msg 관련 문제를 해결하는 방법에 대한 아이디어가 있으십니까?

많은 감사합니다.

+0

그리고 이것은 Qt와 관련이 있습니다. 왜냐하면 ... ...? –

+0

Qt의 프로젝트에서 Microsoft 컴파일러를 사용하고 있기 때문에 Microsoft Visual Studio 2008에서 사용할 수있는 프로젝트 설정에 액세스 할 수 없습니다. – Chaos

+0

그러나 메시지 맵을 사용하는 코드는 확실히 MFC 코드이며 왜 당신이 Qt 프로젝트에서 MFC로 귀찮게하는지 이해하지 못 하겠지만, 아마 이것에 대한 동기를 완전히 이해하지 못했을 것입니다. 이제 제 질문은 Qt 프로젝트가 MFC 메시지 맵과 어떤 관계가 있는지입니다. –

답변

1

오류 메시지에 표시된 내용과 _AFXDLL 전처리 기 기호를 입력하면됩니다. 빌드 환경에 따라 컴파일러 명령 행에 인자로 덧붙일 필요가 있습니다 (정확히 기억한다면 /D_AFXDLL). 그러나 Qt로 작업 할 때 어쨌든 * .pro 파일을 가지고있을 뿐이며 (DEFINES 변수를 사용하여) 거기에 추가 할 수 있습니다. 그러니 그냥 *,

DEFINES += _AFXDLL 

을 제기하지만 너무 많은 도움이되지 않습니다 (두 개의 완전히 다른 GUI 및 OS 추상화 라이브러리가있는)는 Qt는 응용 프로그램에 MFC 코드를 통합 .PRO 당신이 줄을 추가 그들은 둘 다 디자인 문제에 대해 말하지 않고 함께 잘 작동하지 않습니다. 아마도 MFC에서 Qt로 응용 프로그램을 이식 할 수 있습니다.

+0

나는 전체 DEFINES 일을했지만 그때 나는 완전히 새로운 슬루 또는 오류를 만드는 # 을 #include를 제거해야만했다. 이 전체 afx_msg 것에 해당하는 Qt에 대한 아이디어는 있습니까? 나는 그것에 tranlating하려고합니다 ... – Chaos

+0

Qt와 MFC (및 Win32)에 대해 알고있는 내용에 달려 있습니다.MFC 메시지 맵은 윈도우 메시지를 클래스 메쏘드에 매핑합니다 (실제로'afx_msg' 키워드는 아무 것도 정의되지 않았습니다, 그것은 클래스 마법사 용입니다). Win32 메시지에 해당하는 가장 가까운 Qt는 이벤트이지만 일부 키워드를 변경하는 것만 큼 쉽지는 않습니다. 전체 애플리케이션을 코드와 Qt, MFC 및 Win32 기능에 의존하는 Qt로 다시 디자인해야하며 상당히 복잡 할 수 있습니다. 대답 할 필요가있는 몇 가지 질문 만 줄이지는 않습니다. –

+0

솔직히 말해서 나는 그들 중 어느 것에 대해서도 그렇게 많이 모른다. WM_PI_RAWDATA_READY 메시지는 하드웨어에 의해 전송됩니까? 그래서 어떻게 든 QWidget :: winEvent()를 사용하여이 메시지를 읽고 afx_msg와 동일한 이벤트를 트리거 할 수 있습니까? 이 메시지는 'LRESULT'함수를 트리거했지만 실제로 LRESULT의 중요성을 알지 못합니다. – Chaos

0

기본적으로 정적 라이브러리 또는 DLL 중 하나를 사용해야한다고 말합니다. 섞을 수 없습니다.

말하자면, 이것은 프로젝트 설정의 일부입니다.