Microsoft MVP성태의 닷넷 이야기
VC++: 11. Delay Loaded DLL [링크 복사], [링크+제목 복사],
조회: 26544
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 


DLL을 과연 언제 delay loaded 방식으로 처리하는 것이 좋을까요?

첫 번째 이유는, 당연히 최초 Application의 로딩 속도를 빠르게 하고 싶어서입니다. 이건 너무나 당연한 것이라서 더 이상 설명의 여지가 없지요.

두 번째 이유는, 다중 환경을 지원하기 위해서 delay loaded 방식을 사용할 수 있습니다. 음... 다중 환경이라... 예를 한번 들어볼까요?

TestMethod라는 Win32 API가 Windows XP 이상에만 포함된 Test.DLL 파일에만 구현되어 있다고 해봅시다. 그런 경우, Test.lib에 링크를 해버리면 해당 프로그램은 Windows 98에서는 실행조차 할 수가 없게 되지요. 만약 개발자가, Win98에서는 해당 기능을 사용하려고 할 때에 불가능하다는 메시지를 띄우게 하고, WinXP 이상인 경우에는 정상적으로 사용하도록 프로그램하고 싶다면!

바로 그럴 때, delay loaded 방식으로 Test.DLL과 링크를 시켜주면 됩니다. 다음과 같은 식이면 좋겠지요.

if (IsWin98() == true)
{
  MessageBox(NULL, "WinXP 이상에서만 사용할 수 있습니다.", NULL, MB_OK);
} else {
   TestMethod();
}

물론, GetProceAddress / LoadLibrary를 사용한 방법도 있는데, 그런 경우에는 호출이 delay loaded DLL 방식보다 더 복잡하게 되지요. 소스의 간결성 차원에서라도 바람직한 방법은 아닙니다.

자, 이제 그럼 어떻게 Delay Loaded 방식으로 링크할 수 있을까요?
경우의 수는 여러 가지가 있겠지만, 제가 주로 사용하는 틀은 다음과 같습니다.

VS.NET 2005의 경우.

: 소스
#pragma comment( lib, "Test.lib" )

: 프로젝트 속성
좌측 트리에서 Configuration Properties / Linker / Input을 선택하면 우측 리스트 박스에 Delay Loaded DLLs 항목이 나옵니다. 거기에 "Test.dll"이라고 추가해 주면 됩니다.

그리 어렵지 않지요. ^^ 사실, delay loaded 방식에 대해서 소개된 지는 오래되었지만. 이제서야 한번 실제 적용을 해보게 되는군요. ^^

이외에도 다음의 토픽을 함께 봐두시는 것도 좋을 것 같아서 링크를 적어봅니다.

Explicitly Unloading a Delay-Loaded DLL :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcconexplicitlyunloadingdelay-loadeddll.asp

Loading All Imports for a Delay-Loaded DLL:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vclrfLoadingAllImportsForDelayLoadedDLL.asp

Changes in the DLL Delayed Loading Helper Function Since Visual C++ 6.0 :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vchowChangesInHelperFunctionFromVisualC60.asp











[최초 등록일: ]
[최종 수정일: 6/26/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 151  152  153  154  155  156  157  158  159  160  [161]  162  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
1083정성태7/11/201131041.NET Framework: 228. Entity Framework 4.1 - Code First + WCF 서비스 시 EndpointNotFoundException 오류
1082정성태7/10/201130851.NET Framework: 227. basicHttpBinding + 사용자 정의 인증 구현 [2]파일 다운로드1
1081정성태7/9/201129729VC++: 53. Windows 7에서 gcc.exe 실행 시 Access denied 오류 [2]
1080정성태7/8/201128526웹: 23. Sysnet 웹 사이트의 HTML5 변환 기록 - 두 번째 이야기파일 다운로드1
1079정성태7/6/201132843오류 유형: 129. Hyper-V + Realtek 랜카드가 설치된 시스템의 BSOD 현상 [2]
1078정성태7/5/201140521VC++: 52. Chromium 컴파일하는 방법 [2]
1077정성태6/24/201137683.NET Framework: 226. HttpWebRequest 타입의 HaveResponse 속성 이야기파일 다운로드1
1076정성태6/23/201132354오류 유형: 128. SQL Express - User Instance 옵션을 사용한 경우 발생하는 오류 메시지 유형 2가지
1075정성태6/21/201127571VS.NET IDE: 69. 윈폰 프로젝트에서 WCF 서비스 참조할 때 Reference.cs 파일이 비어있는 경우
1074정성태6/20/201127729.NET Framework: 225. 닷넷 네트워크 라이브러리의 트레이스 기능파일 다운로드1
1073정성태6/20/201129924오류 유형: 127. Visual Studio에서 WCF 서비스의 이름 변경 시 발생할 수 있는 오류
1072정성태6/19/201129526.NET Framework: 224. EF 4.1 Code First에서 Identity 칼럼 생성하는 방법파일 다운로드1
1071정성태6/19/201133010.NET Framework: 223. Entity Framework 4.1의 Code First를 이용한 SQL Azure 데이터베이스 생성 [3]파일 다운로드1
1070정성태6/19/201130591.NET Framework: 222. Windows Azure - VM Role 베타 프로그램 참여 [2]
1069정성태6/18/201130690.NET Framework: 221. Cache 영향을 받지 않는 DNS 이름 풀이 [2]파일 다운로드1
1068정성태6/16/201128088개발 환경 구성: 127. Portable Library - 닷넷 N-Screen용 공통 라이브러리 제작 [1]
1067정성태6/15/201127641오류 유형: 126. Windows failed to apply the Group Policy Folder Options settings. [1]
1066정성태6/14/201130711개발 환경 구성: 126. MSDN 구독자 - Windows Azure 무료 서비스 신청하는 방법 [4]
1065정성태6/13/201135596개발 환경 구성: 125. Firebird - 유니코드 기본 문자셋 지정
1064정성태6/11/201130213웹: 22. Visual Studio 2010에서 CSS 3 인텔리센스(intellisense) 지원하는 방법 [1]
1063정성태6/10/201131837웹: 21. Sysnet 웹 사이트의 CSS 2.1 변환 기록 [1]
1062정성태6/9/201132069웹: 20. Sysnet 웹 사이트의 HTML5 변환 기록 [1]
1061정성태6/8/201130124오류 유형: 125. 인터넷 익스플로러 - 개발자 도구에서 정지점(BP: Breakpoint) 설정이 안 되는 경우 [1]
1060정성태6/8/201126925VC++: 51. PHP 모듈의 F5 디버깅
1059정성태6/6/201132329VC++: 50. PHP 모듈 - php_mysql 빌드하는 방법파일 다운로드1
1058정성태6/5/201135744개발 환경 구성: 124. .NET 개발자가 처음 해보는 PHP + MySQL 연동 [2]
... 151  152  153  154  155  156  157  158  159  160  [161]  162  163  164  165  ...