정적으로 MFC에 링크된 기본 DLL
정적으로 MFC에 링크된 기본 DLL은 MFC를 내부적으로 사용하는 DLL이며, MFC 또는 비 MFC 실행 파일에서 이러한 DLL의 내보내기 함수를 호출할 수 있습니다. 이름에서 알 수 있듯이 이러한 종류의 DLL은 MFC의 정적 연결 라이브러리 버전을 사용하여 빌드됩니다. 기본 DLL에서 함수는 대개 표준 C 인터페이스를 사용하여 내보내집니다. 기본 DLL의 작성, 빌드 및 사용 방법에 대한 예제를 보려면 DLLScreenCap 샘플을 참조하십시오.
USRDLL이라는 용어는 Visual C++ 설명서에서 더 이상 사용되지 않습니다. 정적으로 MFC에 링크한 기본 DLL의 특징은 이전 USRDLL의 특징과 같습니다.
정적으로 MFC에 링크된 기본 DLL에는 다음과 같은 특징이 있습니다.
C, C++, 파스칼, Visual Basic 등 DLL 사용을 지원하는 모든 언어로 클라이언트 실행 파일을 만들 수 있으며 이 실행 파일은 MFC 응용 프로그램이 아니어도 됩니다.
DLL은 응용 프로그램에서 사용하는 것과 동일한 MFC 정적 연결 라이브러리에 링크됩니다. 따라서 DLL에 대한 별도의 정적 연결 라이브러리 버전은 필요하지 않습니다.
MFC 버전 4.0 이전에 USRDLL은 정적으로 MFC에 링크된 기본 DLL과 같은 형식의 기능을 제공했습니다. 그러나 Visual C++ 버전 4.0부터는 USRDLL이라는 용어를 사용하지 않습니다.
정적으로 MFC에 링크된 기본 DLL의 요구 사항은 다음과 같습니다.
이 형식의 DLL에서는 CWinApp에서 파생된 클래스를 인스턴스화해야 합니다.
이 형식의 DLL에서는 MFC에서 제공하는 DllMain을 사용합니다. 따라서 일반적인 MFC 응용 프로그램과 마찬가지로 모든 DLL과 관련된 초기화 코드는 InitInstance 멤버 함수에, 종료 코드는 ExitInstance에 포함시켜야 합니다.
USRDLL이라는 용어가 더 이상 사용되지 않지만 컴파일러 명령줄에서는 "_USRDLL"을 정의해야 합니다. 이 정의는 MFC 헤더 파일에서 가져올 선언을 결정합니다.
기본 DLL에는 MFC 응용 프로그램과 마찬가지로, CWinApp 파생 클래스 및 해당 응용 프로그램 클래스의 단일 개체가 있어야 합니다. 그러나 응용 프로그램의 CWinApp 개체와 달리 DLL의 CWinApp 개체에는 기본 메시지 펌프가 없습니다.
응용 프로그램이 기본 메시지 펌프를 소유하므로 CWinApp::Run 메커니즘은 DLL에 적용되지 않습니다. DLL이 모덜리스 대화 상자를 열거나 자체의 기본 프레임 창을 갖는 경우, 응용 프로그램의 기본 메시지 펌프는 DLL에서 내보내는 루틴을 호출해야 합니다. 그러면 이 루틴이 DLL의 응용 프로그램 개체에 대한 CWinApp::PreTranslateMessage 멤버 함수를 호출하게 됩니다.
이 함수의 예제를 보려면 DLLScreenCap 샘플을 참조하십시오.
기호는 대개 표준 C 인터페이스를 사용하여 기본 DLL에서 내보내집니다. 기본 DLL에서 내보내기 함수의 선언 형식은 다음과 유사합니다.
코드 복사
extern "C" __declspec(dllexport) MyExportedFunction( );
기본 DLL 내의 모든 메모리 할당은 DLL 내에 존재해야 하므로 DLL에서 다음 중 어떤 것도 호출 실행 파일에 전달하거나 호출 실행 파일로부터 받아서는 안 됩니다.
MFC 개체에 대한 포인터
MFC에서 할당한 메모리에 대한 포인터
위와 같은 작업이 필요하거나 호출 실행 파일과 DLL 사이에 MFC 파생 개체를 전달해야 하는 경우에는 확장 DLL을 빌드해야 합니다.
C 런타임 라이브러리에서 할당한 메모리에 대한 포인터는 해당 데이터의 복사본을 만들어야만 응용 프로그램과 DLL 간에 안전하게 전달됩니다. 이러한 포인터를 삭제하거나 크기를 변경하거나 사용하려면 반드시 메모리의 복사본을 만들어야 합니다.
또한 정적으로 MFC에 링크된 DLL은 공유 MFC DLL에 동적으로 링크될 수 없습니다. 정적으로 MFC에 링크된 DLL은 다른 DLL과 마찬가지로 응용 프로그램에 동적으로 바인딩되며, 응용 프로그램은 다른 DLL과 마찬가지로 그것에 링크합니다.
표준 MFC 정적 연결 라이브러리는 MFC DLL의 명명 규칙에 설명된 규칙에 따라 이름이 지정됩니다. 그러나 MFC 버전 3.0 이상에서는 링커에 링크하려는 MFC 라이브러리 버전을 직접 지정할 필요가 없습니다. 대신 MFC 헤더 파일에서 _DEBUG 또는 _UNICODE 등과 같은 전처리기의 정의에 따라 링크할 올바른 버전의 MFC 라이브러리를 자동으로 결정합니다. MFC 헤더 파일에 /DEFAULTLIB 지시문을 추가하여 링커가 특정 버전의 MFC 라이브러리에 링크하도록 합니다.
http://msdn.microsoft.com/ko-kr/library/f22wcbea(VS.80).aspx
동적으로 MFC에 링크하는 기본 DLL을 빌드할 때에는 AFX_MANAGE_STATE 매크로를 사용하여 MFC 모듈 상태를 올바르게 전환해야 합니다. DLL에서 내보낸 함수의 시작 부분에 다음과 같은 코드 행을 추가하여 이를 수행합니다.
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
정적으로 MFC에 링크하는 기본 DLL이나 확장 DLL에 AFX_MANAGE_STATE 매크로를 사용해서는 안 됩니다. 자세한 내용은 MFC 모듈의 상태 데이터 관리를 참조하십시오.
글타래
-
▼
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월 16일 화요일
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기