문제

나는 단지 이 둘의 차이점에 대한 간단하고 간결한 설명을 찾고 있습니다.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에서 가져온 것으로 표시합니다.이 경우 함수의 서명만 선언하고 코드를 라이브러리와 연결하면 됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top