생성자를 던져서 DLL 경계를 넘어서 던지는 것에 대해 몇 가지 질문이 있지만이 특정 상황에 대한 대답은 찾을 수 없습니다.DLL 경계를 넘어 생성자에서 예외를 throw하는 것
두 가지가 내가 읽은 : 뭔가 나쁜 일이 생기면
생성자는 예외가 발생합니다. 이렇게하면 객체가 좀비 상태에 있지 않고 객체의 상태를 확인하는 함수가 필요 없으며 RAII가 실행됩니다. 모든 좋은 것들.
DLL 경계를 넘겨서는 안됩니다. 힙 메모리는 공유되지 않으며 나쁜 일이 발생할 수 있습니다. 이것의 세부 사항은 나에게 조금 벗어났다. 그러나 도처에 일반적 충고는 그것을하지 않는다. 그래서 나는 실용하지 않는다. 예외 (!)는 모든 코드가 동일한 컴파일러로 컴파일 될 때 발생하지만 컴파일러에 따라 다르므로 신뢰성이 떨어지는 것입니다. 오류 코드입니다!
가 어떻게 안전하게 DLL 어딘가에 정의 된 클래스의 인스턴스를 만들려면 어떻게해야합니까?
아마도이 작업을 수행하는 유일한 방법은 DLL의 모든 (내보내기 된) 생성자가 예외를 발생시키지 않거나 NULL 일 수있는 개체에 대한 포인터를 반환하는 수출 된 자유 함수를 제공하도록 약속하는 것입니다. 예외가 캐치되었을 경우
누군가가 더 적합한 것을 제안 할 수 있습니까, 아니면 내가 스틱의 끝이 잘못됐다고 말할 수 있습니까?
exe와 dll이 동일한 버전의 런타임 지원을 사용하고 정적 버전이 아닌 dll 버전인지 확인해야합니다. –
읽을만한 가치가있는 가치가있는 [DLL의 클래스 사용법] (http://stackoverflow.com/questions/4555961/how-to-use-a-class-in-dll). 거의 모든 질문에 대한 답변과 아직 생각하지 못한 몇 가지 사항에 대한 답변입니다. – user4581301
잘못된 버전의 dll로 인해 문제가 발생할 수 있기 때문에 클래스를 내보내고 싶지 않습니다. 그러나 클래스가 내 보낸 함수를 구현하는 데 내부적으로 사용되면 괜찮습니다. 위의 주석 링크는 인터페이스 만 내보내는 것을 피합니다. –