지역명 아님... 자전거 이름임
by 낙서
카테고리
Re-building the MFC(4.2) with MSLU (부제: mfc42lu.lib 만들기)
[재 료]
설치된 Visual Studio 6.0 파일들 (Visual C++ 포함된)

[과 정]

1. Back up
VC98\MFC\LIBVC98\MFC\SRC 를 백업 합니다.
(나중에 원래대로 복구하기 위해서 필요하겠죠)

막 간
MFC42U.DLL (Unicode Release)
MFC42UD.DLL (Unicode Debug)
MFCN42UD.DLL (Unicode Debug - Network classes)
MFCO42UD.DLL (Unicode Debug - OLE classes)
MFCD42UD.DLL (Unicode Debug - Database classes)

유니코드 버젼의 MFC(excluded MSLU)는 위 5가지 DLL로 구성되어 있습니다.
릴리즈 모드를 위한 DLL은 한개인 반면 디버그 모드를 위한 DLL이 4개 인 이유는 디버깅 시 로딩 속도를 빠르게 하기 위해서라는군요.

2. Makefile 수정
VC98\MFC\SRC 에 위치한 아래 4가지 MAK 파일을 수정 해야 합니다.
(수정 이유는 리빌딩 될 DLL에 Unicows.lib가 포함되게 하기 위함입니다)
MFCDLL.MAK
MFCNET.MAK
MFCOLE.MAK
MFCDB.MAK

각 파일 안에

link @<<

이런 명령문이 존재 합니다. 이 명령문 뒤에 다음과 같은 라이브러리들을 삽입해야 합니다.

/nod:kernel32.lib /nod:advapi32.lib /nod:user32.lib /nod:gdi32.lib /nod:shell32.lib /nod:comdlg32.lib /nod:version.lib /nod:mpr.lib /nod:rasapi32.lib /nod:winmm.lib /nod:winspool.lib /nod:vfw32.lib /nod:secur32.lib /nod:oleacc.lib /nod:oledlg.lib /nod:sensapi.lib unicows.lib kernel32.lib advapi32.lib user32.lib gdi32.lib shell32.lib comdlg32.lib version.lib mpr.lib rasapi32.lib winmm.lib winspool.lib vfw32.lib oleacc.lib oledlg.lib

3. DLL 이름 결정 및 변경
Re-build를 통해 생성될 새로운 DLL의 이름을 결정 한 후 소스코드를 변경 해주는 과정입니다.
새로운 이름은 아래와 같이 설정 했습니다.

MFC42LU.DLL
MFC42LUD.DLL
MFCN42LUD.DLL
MFCO42LUD.DLL
MFCD42LUD.DLL

변경 해줘야 하는 소스코드는 다음과 같습니다.

DLLDB.CPP 소스코드 안에서 38,39 번째 줄과 46,47번째 줄의 내용을 아래와 같이 수정 합니다.
#define MFC42_DLL "MFC42LUD.DLL"
#define MFCO42_DLL "MFCO42LUD.DLL"
#define MFC42_DLL "MFC42LU.DLL"
#define MFCO42_DLL "MFCO42LU.DLL"

DLLNET.CPP 소스코드 안에서 37번째 줄과 43번째 줄의 내용을 아래와 같이 수정 합니다.
#define MFC42_DLL "MFC42LUD.DLL"
#define MFC42_DLL "MFC42LU.DLL"

DLLOLE.CPP 소스코드 안에서 38번째 줄과 44번째 줄의 내용을 아래와 같이 수정 합니다.
#define MFC42_DLL "MFC42LUD.DLL"
#define MFC42_DLL "MFC42LU.DLL"

DLLINIT.CPP 소스코드 안에서 371번째 줄과 373번째 줄의 내용을 아래와 같이 수정 합니다.
#define MSVCRT_DLL "MSLURTD.DLL"
#define MSVCRT_DLL "MSLURT.DLL"

추가적으로 DLLINIT.CPP 소스코드 안에서 아래 사항을 수정해 주셔야 합니다.
DLLINIT.CPP 소스코드 안에서 391번째 줄을 아래와 같이 수정 합니다.
#ifdef _UNICODE

#if 0
로 변경 하시면 됩니다.

4. DEF 파일이름 수정하기
VC98\MFC\SRC\INTEL 경로 안에 있는 아래 파일들의 이름을 다음과 같이 수정 합니다.

MFC42U.DEF --> MFC42LU.DEF
MFC42UD.DEF --> MFC42LUD.DEF
MFCN42UD.DEF --> MFCN42LUD.DEF
MFCO42UD.DEF --> MFCO42LUD.DEF
MFCD42UD.DEF --> MFCD42LUD.DEF

위에 언급 된 DEF 파일들을 열어 LIBRARY 항목 다음에 있는 문자를 DEF 파일 이름과 동일하게 수정해야 합니다.
예를 들어 MFC42LU.DEF 파일 안에 LIBRARY 항목은 다음과 같습니다.

LIBRARY MFC42u

이를 다음과 같이 수정해 주셔야 합니다.

LIBRARY MFC42lu

5. 배치파일 만들기
리빌딩 준비가 완료 되었습니다. 리빌딩을 위한 배치 파일을 만들어보도록 하죠.
MFC\SRC 경로 밑에 buildmfc.bat 파일을 생성 합니다. 그리고 아래와 같은 내용을 입력해 주세요.

nmake -f mfcdll.mak libname=MFC42L DEBUG=0 UNICODE=1 /a
nmake -f mfcdll.mak libname=MFC42L DEBUG=1 UNICODE=1 /a
nmake -f mfcdb.mak libname=MFCD42L DEBUG=1 UNICODE=1 /a
nmake -f mfcnet.mak libname=MFCN42L DEBUG=1 UNICODE=1 /a
nmake -f mfcole.mak libname=MFCO42L DEBUG=1 UNICODE=1 /a

6. 배치파일 실행 후
새롭게 생성된 DLL 파일은 VC98\MFC\SRC 에 저장됩니다.
새롭게 생성된 LIB 파일은 MFC\LIB 에 저장됩니다.

MFC\LIB 에서 mfc42lu.lib 파일을 만나실 수 있습니다.

7.Trouble Shooting
MS Visual Studio 6.0에는 unicows.lib 파일이 기본적으로 내장되어 있지 않습니다. 따라서 이 파일을 따로 확보하지 못하면 mfc42lu.lib & mfc42lu.dll 파일을 컴파일 하는 과정에서 링킹 오류가 발생합니다. unicows.lib 파일을 확보한 후 VC98\MFC\LIB 에 저장 하십시요. 그리고 배치 파일을 실행 하면 정상적으로 mfc42lu.lib 파일이 생성되는 것을 확인 할 수 있습니다.

by 낙서 | 2009/09/22 15:52 | Reversing | 트랙백 | 덧글(0)
트랙백 주소 : http://neobug.egloos.com/tb/2432305
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글



<< 이전 페이지 다음 페이지 >>


최근 등록된 덧글
rss

skin by 이글루스