업데이트: 2007년 11월
오류 메시지
'identifier' : class 'type'에서는 class 'type2'의 클라이언트에서 DLL 인터페이스를 사용하도록 지정해야 합니다.
'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'
__declspec(dllexport)을 사용하여 클래스를 내보낼 때 데이터가 손상될 가능성을 최소화하려면 다음 사항을 확인해야 합니다.
DLL에서 내보낸 함수를 통해 모든 정적 데이터에 액세스할 수 있어야 합니다.
클래스의 인라인 메서드로 정적 데이터를 수정할 수 없어야 합니다.
클래스의 인라인 메서드에서 CRT 함수를 사용하지 말아야 하거나 다른 라이브러리 함수에서 정적 데이터를 사용해야 합니다. 자세한 내용은 Potential Errors Passing CRT Objects Across DLL Boundaries를 참조하십시오.
EXE와 DLL 인스턴스화의 정적 데이터가 서로 다른 형식은 인라인 여부와 상관없이 클래스의 어떠한 메서드에서도 사용할 수 없어야 합니다.
해당 형식의 개체를 인스턴스화하고 삭제하기 위해 호출할 수 있는 함수 및 가상 함수가 있는 클래스를 정의하는 DLL을 정의하면 클래스를 내보내지 않을 수 있습니다. 그런 다음 해당 형식에 대해 가상 함수를 호출하기만 하면 됩니다.
템플릿을 내보내는 데 대한 자세한 내용은 http://support.microsoft.com/default.aspx?scid=KB;EN-US;16을 참조하십시오.
표준 C++ 라이브러리에서 형식을 파생하고, 디버그 릴리스(/MTd)를 컴파일하고, 컴파일러 오류 메시지에서 _Container_base를 참조하는 경우 Microsoft Visual C++ 2005에서 C4251을 무시할 수 있습니다.
// C4251.cpp
// compile with: /EHsc /MTd /W2 /c
#include <vector>
using namespace std;
class Node;
class __declspec(dllimport) VecWrapper : vector<Node *> {}; // C4251