다음을 통해 공유


Dllimport 및 >dllexport에서 C++ 클래스를 사용합니다.

Microsoft 전용

C + + 클래스를 선언할 수 있는 dllimport 또는 dllexport 특성.이러한 양식은 전체 클래스가 가져오거나 내보내는 것을 의미 합니다.이 방법으로 내보낸 클래스를 내보낼 수 있도록 클래스 라고 합니다.

다음 예제에서는 내보낼 수 있도록 하는 클래스를 정의합니다.모든 멤버 함수 및 정적 데이터 내보낼 수 있습니다.

#define DllExport   __declspec( dllexport )

class DllExport C {
   int i;
   virtual int func( void ) { return 1; }
};

명시적 사용은 dllimport 및 dllexport 특성을 내보낼 수 있도록 하는 클래스의 멤버는 금지 합니다.

>dllexport 클래스

클래스 선언 dllexport, 모든 멤버 함수 및 정적 데이터 멤버를 내보낼 수 있습니다.정의의 모든 멤버에 동일한 프로그램을 제공 해야 합니다.그렇지 않으면 링커 오류가 생성 됩니다.이 규칙의 한 가지 예외는 명시적 정의 제공할 필요가 없는 순수 가상 함수를 적용 합니다.그러나 추상 클래스에 대 한 소멸자가 항상 기본 클래스의 소멸자가 호출 되기 때문에 순수한 가상 소멸자 정의 항상 제공 해야 합니다.참고 이러한 규칙 nonexportable 클래스에 대 한 동일 하.

데이터 클래스 형식 또는 클래스를 반환 하는 함수를 내보내는 경우 내보내기 클래스 해야 합니다.

dllimport 클래스

클래스 선언 dllimport, 모든 멤버 함수 및 정적 데이터 멤버를 가져옵니다.동작을 달리 dllimport 및 dllexport nonclass 형식에서 정적 데이터 멤버 정의 동일한 프로그램에서 지정할 수 없습니다 있는 dllimport 클래스에서 정의 됩니다.

내보낼 수 있는 클래스 및 상속

모든 기본 클래스는 내보낼 수 있는 클래스를 내보낼 수 있어야 합니다.그렇지 않으면 컴파일러 경고가 생성 됩니다.게다가 또한 클래스는 액세스 가능한 멤버를 모두 내보낼 수 있어야 합니다.이 규칙을 허용는 dllexport 클래스에서 상속 하는 dllimport 클래스를 하는 dllimport 에서 상속 하는 클래스는 dllexport 클래스 (두 번째 방법을 권장 되지 않습니다 있지만).일반적으로 DLL의 클라이언트 (액세스 규칙을 C++)를 기준으로 액세스할 수 있는 모든 것 내보낼 수 있는 인터페이스 여야 합니다.인라인 함수에서 참조 하는 전용 데이터 멤버를 포함 합니다.

선택적 멤버 가져오기/내보내기

암시적 멤버 함수와 정적 데이터는 클래스 내에서 외부 링크를 사용 하기 때문에 선언할 수는 dllimport 또는 dllexport 전체 클래스를 내보내지 않는 특성.전체 클래스를 가져오거나 내보낼, 멤버 함수 및 데이터를 명시적으로 선언 하는 경우 dllimport 또는 dllexport 허용 되지 않습니다.정적 데이터 멤버는 클래스 정의 내에서 선언 하는 경우 dllexport, 정의 어딘가에 프로그램 내 (nonclass 외부 링크 처럼) 발생 해야 합니다.

마찬가지로, 멤버 함수를 선언할 수 있습니다의 dllimport 또는 dllexport 특성입니다.제공 해야 합니다이 경우에 dllexport 어딘가에 동일한 프로그램 내에서 정의 됩니다.

선택적 멤버 가져오기 및 내보내기에 대 한 몇 가지 중요 한 포인트를 확인 하는 것이 좋습니다.

  • 선택적 멤버 가져오기/내보내기 버전 보다 제한적인 내보낸된 클래스 인터페이스를 제공 하는 데 가장 많이 사용 됩니다. 즉, 한 언어 보다 적은 공용 및 전용 기능을 노출 하는 DLL을 디자인할 수 있습니다 그렇지 수 있습니다.내보낼 수 있는 인터페이스를 미세 조정에 대 한 유용한 것: 클라이언트, 정의 의해 몇 가지 개인 데이터에 액세스할 수 없는 경우 전체 클래스를 내보내는 해야 합니다.

  • 클래스에서 가상 함수를 내보내는 경우 내보내기를 하거나 적어도 클라이언트가 직접 사용할 수 있는 버전을 제공 해야 합니다.

  • 선택적 멤버 가져오기/내보내기 가상 함수에 사용 되는 클래스의 경우 함수 또는 인라인 (클라이언트에 게 표시)를 정의 합니다. 내보낼 수 있는 인터페이스에서 같아야 합니다.

  • 구성원으로 정의 하는 경우 dllexport 클래스 정의에 포함 되지 않습니다 하지만 컴파일러 오류가 생성 됩니다.클래스 헤더에 해당 멤버를 정의 해야 합니다.

  • 하지만 클래스 멤버의 정의 dllimport 또는 dllexport 입니다 허용, 클래스 정의에서 지정 된 인터페이스를 재정의할 수 없습니다.

  • 멤버 함수를 선언한 그는 클래스 정의의 본문 이외의 다른 곳에서 정의 하는 경우 함수 이름으로 정의 된 경우 경고가 생성 됩니다 dllexport 또는 dllimport (다르면이 정의를 클래스 선언에 지정).

참고 항목

참조

>dllexport, dllimport