MFC정적으로 DLL 링크 + /MT 시 다음의 wincore.cpp 1475 line 에서 에러가 난다!
(다이얼로그 클래스를 DLL내부에서 호출하지 않고 EXE에서 override 하여 쓰는 경우)
즉,CResizeDialog 를 DLL에 구현하고 EXE의 CAboutDlg를 CDialog가 아닌 DLL's CResizeDialog에서 상속받아 처리한경우에 발생!
말이 보기좋게 정적링크로 DLL 사용가능하다고 한것 뿐이지 이렇게 정적 링크로 DLL을 MFC에 링크로 생성한 DLL 프로젝트에서 확장 컨트롤 클래스나 커스텀 컨트롤 클래스를 구현해놓고 이를 EXE 로 호출하면 빌드는 되더라도 EXE 런타임 에러가 난다. 그렇다면 공유 DLL 모드에서 밖에 MFC를 쓸수 밖에 없다는 말이나 마찬가지 아닌가??? 자꾸만 비대해지는 MFC DLL 들을 내프로그램과 함께 배포안하려는데..?? 방법이 음단말인가??
아니면 EXE 안에 그많은 커스텀 컨트롤 (CWnd 파생등....) 의 소스코드를 fix 시켜서 덩치를 크게 만들어야 하나.. 공유 DLL 모드에서는 참 잘 도는데,정적 DLL모드는 왜 호환이 안되는건지,,내가 모르는 다른 설정이 있는건지,, 아니면 분명히 M$의 버그나 문제로써 Feedback되어 이 문제를 해결했으면 한다.
리본바니 뭐니 지원하려고 MS에서 돈주고 껴넣은 BCG 라이브러리가 MFC에 내장되는 바람에 덩치가 한없이 커지는군...
LRESULT CWnd::OnNTCtlColor(WPARAM wParam, LPARAM lParam)
{
// fill in special struct for compatiblity with 16-bit WM_CTLCOLOR
AFX_CTLCOLOR ctl;
ctl.hDC = (HDC)wParam;
ctl.hWnd = (HWND)lParam;
_AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData();
ctl.nCtlType = pThreadState->m_lastSentMsg.message - WM_CTLCOLORMSGBOX;
//ASSERT(ctl.nCtlType >= CTLCOLOR_MSGBOX);
ASSERT(ctl.nCtlType <= CTLCOLOR_STATIC);
// Note: We call the virtual WindowProc for this window directly,
// instead of calling AfxCallWindowProc, so that Default()
// will still work (it will call the Default window proc with
// the original Win32 WM_CTLCOLOR message).
return WindowProc(WM_CTLCOLOR, 0, (LPARAM)&ctl);
}
테스트 방법은 간단하다.
VC++샘플중에 DLLScreenCap 프로젝트를 열어서 DLLScreenCap DLL프로젝트에 CDialog형에서 override 한 CResizeDialog를 선언한다. 물론,
#ifdef _USRDLL //UICTRLS_EXPORTS
#define UICTRLS_API __declspec(dllexport)
#else
#define UICTRLS_API __declspec(dllimport)
#endif
식으로 export 선언해주고,,,
ScreenCap 에서 screencap.cpp ,
#include "../DllScreenCap/ResizingDialog.h"
CAboutDlg 에서 CDialog 를 CResizingDialog 로 교체한다(Replace).
Build ==> Error!
글타래
-
▼
2009
(71)
-
▼
6월
(44)
- 윤아아빠,전자담배 에바코 참고~
- usb 로 xp 설치
- ML115 서버 및 구닥다리 M925보드 업글용 백업메모
- g304와 g300p를 팔고 N5004를 질러...??
- 은행 인터넷뱅킹시 짜증나는 잡동사니 ActiveX 악성 보안툴들
- 전자담배 에바코 에바,연기적을때 응급조치요령
- 전자담배, 건강에 덜 해롭다? 안전성 검증 시급
- 진짜 같은 '전자담배'. 효과도 OK?
- 게임 개발자 중에서 서버개발이랑 클라이언트 개발 차이점은 뭔가요?
- 언제부턴가 인터넷 접속 모니터링 당하고 있다
- 아,고민되네 서버 프로그래밍 구성기술은 뭘로하지?...
- Win32 IOCP를 따라잡을 Unix, Linux, *BSD계열의 방법은?
- 프로그래머가 되는 방법
- 모던토킹 80년대 롤라장음악 '쉐리쉐리 레이디' 자작 공짜 벨소리 다운로드 해가삼!!
- MS-Windows 플랫폼의 Socket I/O Model 에는
- 솔직히 이 블로그스팟은,
- [강좌] MFC Ribbon Programming - MFC 리본 사용하기
- 블로그의 오른쪽 마우스 금지시킨거나 풀자!!
- 개떡같은 MS-VS++ 플랫폼 및 MFC DLL
- MS-Windows 에서도 Paint.Net 말고 더 좋은 김프를 쓰자! GTK와 GDK
- 무료소프트웨어
- 정적으로 MFC에 링크된 기본 DLL
- MFC 확장 DLL,정적 라이브러리로 링크는 안되는 것일까? -- 정답:안된다
- STATUS_DLL_NOT_FOUND with VS2008,VS200x
- 통합 메신저
- MFC정적으로 DLL 링크 + /MT 시 다음의 wincore.cpp 1475 line 에...
- MFC에 정적 또는 동적으로 링크하는 기본 DLL
- Download Visual Studio 2010(VS2010) Professional B...
- RedistributingVisualCppRunTimeLibrary
- 윈도 애플리케이션을 개발할 때 주로 쓰는 마이크로소프트(이하 MS)의 개발 도구들
- Microsoft Side-by-Side Horror Visual C++ 2008
- 파일만 잘 다뤄도 파워유저(?)
- Seoul City Hall and DeokSuGung
- 2008' 남해에 가려면 삼천포로 빠져야 한다!! 휴가지 남해일주,삼천포의 대교~여수
- URL Parse for SDK Function like AfxParseUrl
- 요즘세대도 이렇게 공부하려나? C언어 이야기
- 7zip plugin Api
- VC 2008 Feature Pack ::MFC 9.0 - 리본바 (Ribbonbar)
- WIN32 SDK FrameWork 라이브러리
- Visual Studio Technical Articles:: Boost for Visua...
- Visual C 에서 CRT와 MFC 라이브러리가 잘못된 순서로 링크되면 LNK2005
- 거꾸로 가는 MicroSoft™ 의 운영체제
- VC 에서 EXE크기 줄이면서 MFC90,MSVCRxx MSVCP DLL 포함 안하는 법
- My This blog moved from http://blog.hanafos.com/ye...
-
▼
6월
(44)
2009년 6월 14일 일요일
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기