EDIT : 콜백 템플릿에 backquotes가 추가되었습니다. 인터페이스는 별표가 아닌 markdown 표시기로 별표를 읽는 중이었습니다!C++ 누락 된 콜백 함수 테스트
필자는 Windows DLL/Linux에서 콜백 함수를 등록하는 방법을 사용자 응용 프로그램에 제공합니다. 훌륭하게 작동합니다. 콜백 프로토 타입은 다음과 같습니다. (void)(*callback)(void*);
문서를 작성하는 동안 편집증에 시달렸으며 등록 된 주소가 유효한지 알 수있는 방법이 없습니다. 유일한 피드백은 크래시이거나 콜백을 try/catch 내부에서 호출하는 것입니다.
콜백이 존재하지 않고 누가 실행되는지 - 어떤 예외가 발생할지 전혀 알지 못합니다. "아무데도"호출이 충돌 대신 예외를 생성 할 정도로 충분히 복구 될 수 있다고 확신 할 수도 있습니다.
예, 사용자의 문제입니다. 사려 깊고 사용자가 자신의 버그를 이해하는 데 도움이 될 수 있습니다.
그럼 예외는 무엇입니까? Windows와 Linux가 서로 다른지 확인하십시오.
누락 된 기능을 감지하기 위해 예외 포착을 사용하지 않고도 더 잘 접근 할 수 있습니까?
NULL을 테스트하고 callback! = NULL 인 경우 함수를 호출 할 수 있습니다. 유효성에 대한 콜백 주소를 테스트하거나 잘못된 주소 호출 후에 복구 할 수있는 신뢰할 수있는 휴대용 방법은 없습니다. –
공유 라이브러리에서 콜백 함수를 호출하려는 경우 유일하게 테스트 할 수있는 콜백 포인터를 null과 비교하는 것입니다. =) 더 좋은 방법은 없습니다. 프로그램에서 segfault를 얻으면 복구 할 수 없습니다. 현재 응용 프로그램을 손상시키지 않고 extern 코드를 실행하는 유일한 방법은 프로세스를 포크하고 거기에서 뭔가를 실행하여 어떤 일이 발생하는지 확인하고 분기 된 프로세스에서 데이터를 가져 오는 것입니다. 그러나 a) 사용자는 프로세스가 포크를 할 것으로 기대하지 않습니다. b) 그가 이것을 원한다고해도 콜백 전에는 공유 할 수없는 모든 리소스를 닫아야합니다. 일반적으로 불가능합니다. – JustAnotherCurious
@JustAnotherCurious 사실, 별도의 스레드가 아닌 별도의 프로세스에서 플러그인을 실행하면 더 많은 또는 덜 표준적인 프로 시저가 현재 지원됩니다. 거의 모든 브라우저가이를 수행합니다. –