Я попал сюда в поисках ответа на ту же проблему. У меня было пользовательское исключение, полученное из std :: runtime_error, и я экспортировал его из моей dll.
Для исключений кажется, что самое простое решение - НЕ ЭКСПОРТИРОВАТЬ производный класс. Вы можете сделать это, если переместите свою реализацию из исходного файла (.CPP) в заголовок (.HPP). Для меня это было тривиально. Я полагаю, что в большинстве случаев с исключениями это будет так.
Это «хорошая вещь», потому что клиент на самом деле компилирует и связывает реализацию вашего пользовательского исключения со своей реализацией std :: runtime_error. Это то, что вам нужно, и именно это и пытается защитить вас от предупреждения C4275: несовместимость между двумя типами объектов std :: runtime_exception во время выполнения.