사용자가 컴파일하는 동안 사용 된 동일한 버전에서 내 dll 라이브러리를 사용하도록하는 표준 방법이 있습니까?다른 버전으로 컴파일 된 라이브러리 사용을 막는 방법
내가 파괴 변경 등을 추가 한 버전 1.1에서extern "C" void A();
:이 기능에 또 다른 변수는 내가 가지고 :
extern "C" void A(int);
내가 기능 버전 1.0 라이브러리가 있다고 가정하자 dll에서 내 보낸 이름은 정확히 같지만 개발자가 버전 1.1로 제품을 컴파일 한 다음 고객에게 보내면 고객이 제품 (exe 파일) 만 업데이트하면 모든 것이 실패합니다. 그리고 런타임에 임의의 지점에서 실패 할 수 있습니다 (이 변경된 기능이 언제 실행되는지에 따라 다름).
잘못된 버전으로 라이브러리를로드하는 것을 방지하는 표준 방법이 있습니까? 저는 주로 Windows dll 파일에 대한 솔루션에 관심이 있습니다. (그러나 다른 플랫폼에 고유 한 솔루션이 있다면 의견을 남겨주십시오.)
위의 예는 단순화되었습니다. C++ mangling을 추가하면 위의 특정 문제가 해결되지만보다 일반적인 해결책을 찾고 있습니다.
제 아이디어는 라이브러리 헤더 파일에 정적 객체를 추가하는 것입니다. 생성자의이 정적 객체는 라이브러리의 메서드를 실행할 수 있으며 name의 메서드는 다음과 같이 현재 버전을 인코딩합니다. init_library_1_1(); 그래서 방법이 dll에없는 경우 매우 초기에 사용자가 뭔가 잘못되었다는 것을 알 수 있습니다. 그러나이 솔루션은 더러운 해결 방법처럼 보입니다. 그리고 개발자가이 파일을 포함하도록주의해야합니다.
이러한 문제에 대해 더 좋은 해결책이 있습니까?
의견을 보내 주셔서 감사합니다. 불행히도 그것을 올바르게 이해한다면 정적 라이브러리를 연결할 때만 도움이 될 수 있습니다. 런타임에 솔루션을 찾고 있어요. 사용자가이 라이브러리를 사용하는 라이브러리와 응용 프로그램 사이의 버전이 일치하지 않습니다. – AdamF