다음을 통해 공유


EXPORTS

내보내기 함수 또는 데이터를 포함하는 하나 이상의 definitions로 이루어진 섹션을 파생시킵니다. 각 정의는 서로 다른 줄에 있어야 합니다.

EXPORTS
definitions

설명

EXPORTS 키워드는 첫 번째 정의와 같은 줄 또는 앞의 줄에 있을 수 있습니다. .def 파일에는 하나 이상의 EXPORTS 문이 들어 있을 수 있습니다.

내보내기 definitions의 구문은 다음과 같습니다.

entryname[=internalname] [@ordinal [NONAME]] [PRIVATE] [DATA]

entryname은 내보내려는 함수 또는 변수 이름으로서 필수 요소입니다. 내보내기 이름이 DLL에 있는 이름과 다른 경우에는 DLL의 내보내기 이름을 internalname 에 지정합니다. 예를 들어, DLL이 func1()이라는 함수를 내보내는데 이 함수를 func2()로 사용하려면 다음과 같이 지정합니다.

EXPORTS
func2=func1

@ordinal을 사용하면 함수 이름이 아닌 번호가 DLL의 내보내기 테이블에 들어가도록 지정됩니다. 이렇게 하면 DLL의 크기를 최소화하는 데 유용합니다. .LIB 파일에는 서수와 함수 간의 매핑이 들어 있으므로 DLL을 사용하는 프로젝트에서와 마찬가지로 함수 이름을 사용할 수 있게 됩니다.

선택적 키워드인 NONAME을 사용하면 함수를 서수로만 내보내므로 결과 DLL의 내보내기 테이블 크기를 줄일 수 있습니다. 하지만 DLL에 대해 GetProcAddress를 사용하려는 경우에는 이름이 유효하지 않게 되므로 서수를 알아야 합니다.

선택적 키워드인 PRIVATE은 LINK로 생성된 가져오기 라이브러리에 entryname이 포함되지 않도록 합니다. 이 키워드는 LINK로 생성된 이미지에 포함된 내보내기에는 적용되지 않습니다.

선택적 키워드인 DATA는 내보내기가 코드가 아니라 데이터임을 지정합니다. 예를 들면, 다음과 같이 데이터 변수를 내보낼 수 있습니다.

EXPORTS
i DATA

동일한 내보내기에 대해 PRIVATEDATA를 사용할 때에는 PRIVATEDATA 앞에 와야 합니다.

정의를 내보내는 데는 다음과 같은 세 가지 방법을 사용합니다(권장 순서에 따라 나열).

  1. 소스 코드에 __declspec(dllexport) 키워드가 있는 경우

  2. .def 파일에서 EXPORTS 문 사용

  3. LINK 명령의 /EXPORT 사양

동일한 프로그램에서 이 세 가지 방법을 모두 사용할 수 있습니다. LINK에서는 내보내기가 들어 있는 프로그램을 빌드할 때 해당 빌드에 .exp 파일이 사용되지 않은 경우 가져오기 라이브러리도 만듭니다.

다음은 EXPORTS 섹션의 예제입니다.

EXPORTS
   DllCanUnloadNow      @1     PRIVATE   DATA
   DllWindowName = Name        DATA
   DllGetClassObject    @4 NONAME   PRIVATE
   DllRegisterServer    @7
   DllUnregisterServer

.def 파일을 사용하여 DLL에서 변수를 내보낼 때에는 해당 변수에 대해 **__declspec(dllexport)**을 지정할 필요가 없습니다. 하지만 해당 DLL을 사용하는 모든 파일에서는 데이터 선언에 여전히 **__declspec(dllimport)**을 사용해야 합니다.

참고 항목

참조

모듈 정의 문의 규칙