2016-10-18 9 views
0

나는 아주 좋은 질문을 보았지만, 내가 알고 싶었던 것이 아니기 때문에 나는 스스로에게 물어볼 것이라고 결정했다.C++ | Windows - STL 객체를 DLL에 전달하기

모든 것이 CRT, 플랫폼 버전 등과 일치해야하므로 std :: string을 함수 (DLL)에 전달하지 말아야한다는 이야기가 많이 있었지만 안전하게 const * char을 전달할 수 있습니까? 함수 및 다음 .dll의 내부 std :: string 's?

내가 최근에 발견 한 이유는 놀랍게도 유용한 C++ 문자열이 있고 .DLL과 함께 사용하고 싶지만 런타임 템플릿 때문에 .dll과 함께 사용하는 것이 안전하지 않다는 것을 발견했기 때문입니다.

내 질문은 주로, 거기에 "안전"방법은 표준 : : DDL을 사용하는 것입니다?

답변

1

내부적으로 사용하는 것이 안전합니다.

그리고 DLL 경계를 넘어서 std::string을 사용하는 것에 대해 너무 걱정하지 마십시오. 공용 인터페이스에서는 사용할 수 없지만 자신의 프로그램과 함께 DLL을 제공하면 양측을 모두 제어 할 수 있습니다. 하나의 VS 솔루션 내에서 두 개의 Visual Studio 프로젝트에 DLL과 EXE를 모두 가지는 것이 일반적입니다. 그것들은 같은 플랫폼 버전 등으로 만들어졌습니다.

0

DLL 인터페이스에 std::string을 자유롭게 사용할 수 있습니다. 그러나 std::string 경계 문제를 피하기 위해 동일한 std 라이브러리로 DLL과 응용 프로그램을 빌드해야합니다.

0

문서화 된 ABI가 없으므로 기술적으로는이며 컴파일러 버전에 따라 변경 될 수 있으며 컴파일러 설정에 따라 달라질 수 있습니다.

호출자와 DLL이 같은 버전의 Visual C++로 작성된 경우 안전해야합니다.

그러나 이것은 공용 인터페이스에서 사용할 수없고 컴파일러를 업그레이드 한 후 새로운 DLL로 다른 EXE를 실행하는 것과 같은 버전 간 호환성을 포기한다는 것을 의미합니다.