dllexport와 dllimport의 차이점은 무엇입니까?
-
09-06-2019 - |
문제
나는 단지 이 둘의 차이점에 대한 간단하고 간결한 설명을 찾고 있습니다.MSDN은 여기서 자세히 설명하지 않습니다.
해결책
__declspec(dllexport)
이 개체를 다른 DLL에서 가져올 수 있도록 링커에 알립니다.다른 사람이 링크할 수 있는 DLL을 생성할 때 사용됩니다.__declspec(dllimport)
애플리케이션이 사용할 수 있도록 DLL에서 구현을 가져옵니다.
나는 단지 초보 C/C++ 개발자이기 때문에 아마도 나보다 더 잘 설명하는 사람이 있을 것입니다.
다른 팁
__declspec( dllexport )
- 그렇게 태그된 클래스나 함수는 내장된 DLL에서 내보내집니다.DLL을 빌드하고 API가 필요한 경우 이 파일이나 내보내기를 정의하는 별도의 .DEF 파일(MSDN).이는 정의를 한 곳에 보관하기 때문에 편리하지만 .DEF 파일은 더 많은 옵션을 제공합니다.
__declspec( dllimport )
- 그렇게 태그된 클래스나 함수는 DLL에서 가져옵니다.실제로는 필요하지 않습니다. 가져오기 라이브러리가 필요합니다. 그래도 링커를 행복하게 만들기 위해.그러나 적절하게 표시되면 dllimport
, 컴파일러와 링커는 호출을 최적화하기에 충분한 정보를 가지고 있습니다.그렇지 않으면 가져오기 라이브러리의 스텁 함수에 대한 일반적인 정적 링크가 발생하여 불필요한 간접 참조가 추가됩니다. ONT1 ONT2
두 가지 사용 사례:
1) dll 내에서 클래스 구현을 정의하고 있습니다.다른 프로그램에서 해당 클래스를 사용하기를 원합니다.여기서는 dll이 노출할 클래스를 생성할 때 dllexport를 사용합니다.
2) dll에서 제공하는 기능을 사용하고 있습니다.DLL과 함께 제공되는 헤더를 포함합니다.여기서 헤더는 dllimport를 사용하여 현재 프로그램에서 사용할 구현을 가져옵니다.
두 경우 모두 동일한 헤더 파일이 사용되며 매크로가 정의되는 경우가 많습니다.빌드 구성은 필요에 따라 매크로를 가져오거나 내보낼 수 있도록 정의합니다.
Dllexport는 함수를 내보낸 것으로 표시하는 데 사용됩니다.DLL에 함수를 구현하고 DLL을 사용하는 모든 사람이 사용할 수 있도록 내보냅니다.
Dllimport는 그 반대입니다.함수를 DLL에서 가져온 것으로 표시합니다.이 경우 함수의 서명만 선언하고 코드를 라이브러리와 연결하면 됩니다.