2012-11-03 5 views
3

LoadLibrary를 사용하여 다른 DLL (winsock)을 동적으로로드하는 DLL을 만들고 있습니다. 나는 내가 DllMain에서 LoadLibrary를 호출해서는 안된다고 읽었지 만, 반복적으로 사용하고 매번 LoadLibrary/GetProcAddress를 호출 할 필요가 없다. 그래서 내 질문은 다음과 같습니다.DLL에서 LoadLibrary를 호출 할 위치는 어디입니까?

  • DLL 내에서 LoadLibrary를 호출하는 가장 좋은 장소는 어디입니까?

  • LoadLibrary/GetProcAddress는 얼마나 빠릅니까? 각 기능에서 오버 헤드가 많이 발생합니까?

답변

3

DllMain 외부에서 설정을 수행하는 초기화 기능을 만듭니다. 귀하의 코드는 DLL이로드 된 후 그 함수를 호출하고, 초기화가 끝나기 위해 필요한 모든 것을 호출 할 수 있습니다.

LoadLibrary() 호출은 한 번만 수행해야합니다. 운영 체제는 프로세스의 공간을 확보하고 계속하기 전에 모든 종속성이로드되었는지 확인해야하므로 비용이 많이 듭니다. DLL이 이미로드 된 경우 디스크에서로드해야하는 경우보다 훨씬 빠릅니다.

GetProcAddress()는 실제로 함수 당 한 번만 호출해야합니다 (이상적). 함수는 DLL의 내보내기 테이블을 탐색하고 이름별로 함수를 찾아야합니다. 여기에는 주소를 찾기위한 문자열 비교가 포함됩니다. 나중에 다음 번에 호출 할 수 있도록 주소를 캐시하고 싶습니다.

+0

설명해 주셔서 감사합니다. – vandev

관련 문제