다음을 통해 공유


__declspec(dllimport)을 사용하여 데이터 가져오기

데이터의 경우 **__declspec(dllimport)**을 사용하면 간접 참조의 계층을 편리하게 제거할 수 있습니다. 그러나 DLL에서 데이터를 가져올 때에는 여전히 가져오기 주소 테이블을 검색해야 합니다. **__declspec(dllimport)**을 사용하기 전에는 DLL에서 내보낸 데이터에 액세스할 때 다음과 같은 추가 수준의 간접 참조를 수행했습니다.

// project.h
#ifdef _DLL   // If accessing the data from inside the DLL
   ULONG ulDataInDll;

#else         // If accessing the data from outside the DLL
   ULONG *ulDataInDll;
#endif

그런 다음 해당 .DEF 파일에 있는 데이터를 내보내게 됩니다.

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   CONSTANT

그리고 다음과 같이 해당 DLL 외부에서 이 데이터에 액세스합니다.

if (*ulDataInDll == 0L) 
{
   // Do stuff here
}

데이터를 **__declspec(dllimport)**으로 표시하면 컴파일러에서 간접 참조 코드를 자동으로 생성합니다. 따라서 사용자는 위에서 설명한 단계를 수행할 필요가 없습니다. 이미 설명한 것처럼 DLL을 빌드할 때에는 데이터에 대해 __declspec(dllimport) 선언을 사용하지 않습니다. DLL 내의 함수는 가져오기 주소 테이블을 사용하여 데이터 개체에 액세스하지 않으므로 추가 수준의 간접 참조를 수행하지 않아도 됩니다.

DLL에서 데이터를 자동으로 내보내려면 다음과 같은 선언이 사용됩니다.

__declspec(dllexport) ULONG ulDataInDLL;

참고 항목

개념

응용 프로그램으로 가져오기