2009-12-03 8 views
0

제 3 자 dll에 연결하는 데 문제가 있습니다. 그것은 Windows Mobile 응용 프로그램, 어디서이 제 3 자 dll에 연결하려고합니다.명시 적 연결에 .def 파일을 사용하는 방법은 무엇입니까?

여기에는 먼저 dll 및 lib 파일이 있습니다. 명시 적으로 링크 할 수 없었지만 암시 적 연결이 작동합니다. 명시 적 링크에서 getprocaddress가 실패했습니다. dumpbin은 dllmain 함수 만 노출되고 다른 함수는 노출되지 않으므로 getprocaddress가 실패했습니다. 그러나 장치에 dll이 없거나 설치되어 있지 않으면 내 응용 프로그램이 시작되지 않습니다. 그것은 DLL의 imlicit 연결이므로 내 응용 프로그램이 시작되지 않습니다 예상된다.

제 3 자 dll 공급자에게이 사실을 알리고 암시 적으로 연결되어 있으면 dll이 응용 프로그램에서 더 많은 공간을 차지하므로 명시 적 연결을 원한다고 말했습니다. 그들은 .def 파일을 제공함으로써 답장했으며 내 .def 파일을 DLL에 명시 적으로 연결하기 위해 사용할 수 있다고 말했습니다.

이 .def 파일을 사용하여 dll에 명시 적으로 링크하는 방법을 모르겠습니다. 어느 누구도 DLL에 명시 적으로 링크하기 위해 내 app에서이 .def 파일을 사용하는 방법에 대해 간단히 설명 할 수 있습니까?

답변

2

DLL을 빌드 할 때 *.def 파일을 사용하여 DLL이 내보낼 함수 이름을 지정하십시오.

DLL을 만든 후에는 dumpbin /exports을 사용하여 함수가 실제로 DLL에서 내보내 졌는지 확인하십시오.

DLL이 함수를 내보내는 것을 확인한 후에는 LoadLibray/GetProcAddress를 사용하여 런타임에 연결할 수 있고 빌드 타임에 DLL의 *.lib 파일을 전달하여 연결할 수 있습니다. *.def 파일을 사용하여 DLL을 만들 때) 응용 프로그램의 링커에 대한 인수로 만들어졌습니다.

+0

안녕하세요 chrisW, dll을 빌드하는 소스 파일이 없으며, DLL, lib 및 타사에서 제공 한 해당 .def 파일 만 있습니다. –

+1

당신은 "덤프 빈은 dllmain 기능 만이 노출되고 다른 기능은 노출되지 않으므로 getprocaddress가 실패했다"고 말했습니다. 다른 functins이 수출되지 않는다면, 나는 * .def 파일로도 링크 할 수 있다고 생각하지 않는다. O/S의 런타임 로더 (동적 연결)는 DLL이 내 보낸 함수로 작업하려고합니다. – ChrisW

관련 문제