2013-08-28 2 views
0

DLL로 컴파일되는 C++ 프로젝트가 있습니다. 멤버 변수로 m_dSurveyStore를 소유 한 여러 클래스가 있습니다. 지도에는 std::string 개의 키와 값을위한 다양한 사용자 정의 클래스가 있습니다. 예 :DLL에서 노출 된 C++ 순서가 지정되지 않은 맵

std::unordered_map< std:string , Survey > SurveyStore; 

다른 프로그램 (둘 다 콘솔 C++뿐만 아니라 .Net 코드)에서 사용하려면 클래스를 내 DLL에서 노출해야합니다. std::string을 맵 키로 사용할 때 "클래스의 클라이언트가 DLL 인터페이스를 사용할 필요가 있습니다"라는 줄에 따라 컴파일러 경고가 표시됩니다. std 형식을 사용하는 인터페이스가 노출되지 않도록 경고하는 다른 게시물을 읽었습니다.

이상적으로 내지도는 개인 멤버 변수가 될 것이며, (생각)은 DLL 외부에 노출되지 않을 것이다 : 나는이 가지는 클래스를 노출 할 경우

class __declspec(dllexport) Project 
{ 
    private: 
     SurveyStore m_dSurveyStore; 
} 

내가 내지도 키 유형 char *을 사용해야 지도를 멤버로 사용하거나 std::string을 사용하여 클래스를 노출하는 강력한 방법이 있습니까? char *를 사용하는 경우 char * 키를 정의하는 구문을 제공하십시오.

+0

SO에서 답을 확인해 보셨습니까? http://support.microsoft.com/default.aspx?scid=KB;EN-US;168958 –

답변

0

키로 char*을 사용하면 안됩니다. 그렇지 않으면 문자열의 내용이 아니라 포인터로 재생됩니다. 컨테이너 std::unordered_map을 보통 배열 []으로 변경해야 할 수 있습니다.

관련 문제