Возвращать объекты C ++ небезопасно только тогда, когда DLL и EXE-файлы не были созданы с одинаковой конфигурацией проекта, с / MT вместо / MD или с разными версиями библиотеки времени выполнения. Во многих случаях это не практическая проблема, ммм.
Безопасный способ состоит в том, чтобы не требовать от EXE освобождения памяти, выделенной из кучи DLL. Или наоборот. Вы должны будете изменить свою структуру для начала, не может иметь wchar_t *. Вы бы написали экспортированную функцию для получения VideoInfo *, чтобы вызывающий мог передать буфер, который заполняет функция.
Но, повторюсь, если нет опасности, что DLL устареет, у вас не будет проблем ни с std :: vector, ни с std :: wstring.