2010-08-14 9 views
1
LIBRARY  Vcam.ax 
EXPORTS 
      DllMain     PRIVATE 
      DllGetClassObject  PRIVATE 
      DllCanUnloadNow   PRIVATE 
      DllRegisterServer  PRIVATE 
      DllUnregisterServer  PRIVATE 

위의 내용은 Filters.def에서 실제로 무엇을합니까?.def 파일을 이해하는 방법은 무엇입니까?

+0

당신은 DllMain을 내보낼 필요가 없습니다 :

MSDN의 문서는 완전한 형식을 설명합니다. –

답변

4

참조 MSDN : 생성 된 가져 오기 라이브러리에 배치되는

옵션 키워드 PRIVATE 방지 entryname을 :

Exporting from a DLL Using DEF Files

Module-Definition (.def) Files

이 약 PRIVATE, 그들은 this 말 링크로. 은 LINK에 의해 생성 된 이미지의 내보내기에 영향을 미치지 않습니다.

즉, 이러한 기능은 DLL의 진입 점 테이블에서 숨겨져 있으며 OS 용으로 예약되어 있습니다.

+0

'.def'가 필요한 이유는'.h'가 충분하지 않기 때문입니까? – user198729

+1

@u : 프로그램의 모든 작은 기능을 내보내는 것을 원하지 않을 것입니다. – Potatoswatter

+1

.h 파일은 컴파일 타임에 소스 코드 용입니다. .def 파일은 런타임에 다른 프로그램 용입니다. – Puppy

2

Win32의 .def 파일은 DLL에서 내 보낸 함수를 설명합니다. gcc/Linux의 .so 파일과는 달리, 모든 심볼이 기본적으로 내보내지기 때문에 컴파일러에게 내보낼 함수를 알려줘야합니다. 표준 방법은 .def 파일에 그것을 나열하는 것입니다. 다른 방법은 Visual C++에서 __declspec (dllexport)을 사용하는 것입니다 (데코 레이팅 된 함수 이름을 사용하는 것은 재미 없을 것입니다).

함수 이름 뒤에 몇 가지 키워드가 있습니다. 서수를 열거 할 수 있고, 이름으로 내보낼 수 없으며 (함수 이름 숨기기에 유용함) 또는 비공개라는 사실을 알 수 있습니다.
Module-Definition (.def) Files

+0

'.def'는'.dll'의 크기에 영향을주지 않습니다. 맞습니까? – user198729

+0

.def 파일은 .dll 내에 패키지되어 있습니다. 그러나 현실은 .def 파일의 크기가 .dll의 컴파일 된 크기와 비교하면 사소한 것입니다. – Puppy

+0

.def 파일은 "linked in"이 아니며 DLL의 내보내기 테이블에 포함되는 링커에 대한 명령어입니다. 어떤 식 으로든 .def 파일은 DLL의 크기에 영향을 미칠 수 있습니다. 함수가 .def 파일로 내보내지지 않고/OPT : REF 옵션이 사용되지 않는 함수 및 데이터를 제거하는 데 사용되고 함수가 DLL 내부에서 사용되면 링커는 함수를 모두 포함하지 않기로 결정할 수 있습니다./OPT 스위치에 대한이 링크를 참조하십시오. http://msdn.microsoft.com/en-us/library/bxwfs976%28VS.80%29.aspx – vividos

관련 문제