2017-01-31 3 views
-1

이것은 복잡한 상황입니다. 프로그램이나 dll 코드가 실행되기 전에 exe 로딩이 약 10 분 지연됩니다. 프로그램과 dll은 모두 사내에서 작성되었습니다. 이전 버전의 dll을 사용하면 문제를 완화하는 것처럼 보입니다. 내가 결정하려고하는 것은 컴파일러가 프로그램에 dll을 연결하는 코드를 생성하고 프로그램을로드하는 데 몇 분의 지연이 발생할 수 있다는 것입니다. 프로그램과 dll은 모두 VC++ 6.0을 사용하여 제작되었습니다. 이것은 약 1 년 전 dll 리비전 이후에 시작되었지만 리비전은 dll 초기화/코드 시작과 관련이 없습니다. 모든 컴퓨터에서 발생하는 것은 아니며 특정 컴퓨터에서 dll을 사용하는 모든 프로그램에 영향을 미치지 않습니다. 실패의 패턴이없는 것 같습니다.프로그램 코드가 실행되기 전에 정적 .lib을 통해 dll에 링크 된 프로그램에서 어떤 일이 발생합니까?

+0

응용 프로그램 및/또는 DLL은 시작할 때 많은 일을 할 수 있습니다. 'DllInitialize()'또는 전역/정적 객체의 생성자에서 - 확인하십시오. 'main()'(또는'WinMain'의 시작 부분에서'MessageBox()')의 시작 부분에 로깅을 넣어서 메인이 실제로 시작했을 때를 알 수 있습니다. – axalis

+0

그래서 10 분 동안 (dll 코드가 호출 될 때) 어떻게됩니까? 앱이 정지 되었나요? 아니면 다른 일을하고있는거야? 어떻게 테스트 했습니까 ('DllMain'에 코드를 추가 했습니까?)? DLL이 앱에 링크되어 있습니까 (dll이 없으면 앱이 시작되지 않습니다) 또는 'LoadLibrary'를 통해로드되었거나 [지연로드 됨] (https://msdn.microsoft.com/en- us/library/151kt790 (v = vs.71) .aspx)? – CristiFati

+1

제목이 다소 혼란 스럽습니다. _static_ .lib는 ** DLL에 ** 연결하지 않음을 의미합니다. DLL을 사용할 때는 _import_ .lib를 사용하십시오. – MSalters

답변

0

"프로그램에 dll을 연결하는 컴파일러 생성 코드는 어떻게됩니까?"

거의 없습니다. 컴파일러에서 생성 한 코드는 EXE가 아니라 DLL에 있습니다. C++ 런타임이로드되었는지 확인하고 글로벌 객체의 생성자를 호출하고 DllMain을 호출하는 세 가지 필수 작업이 있습니다. 생성 된 코드의 마지막 두 부분은 코드를 호출하기 만합니다. 생성 된 코드 자체가 나노초 단위로 실행됩니다.