У меня были проблемы с этим (функция в DLL, возвращающая структуру), и я исследовал ее.Возвращение структуры из DLL для использования людьми, у которых может быть другой компилятор, не является хорошей практикой из-за следующего.
Как это работает, зависит от реализации.Некоторые реализации возвращают небольшие записи в регистрах, но большинство получают невидимый дополнительный аргумент, который указывает на структуру результата в локальной структуре вызывающей стороны.По возвращении указатель используется для копирования данных в структуру в локальном кадре вызывающей стороны.Способ передачи этого указателя снова зависит от реализации: как последний аргумент, как первый аргумент или как регистр.
Как уже говорили другие, возврат ссылок не является хорошей идеей, так как возвращаемая вами структура может быть в вашем локальномРамка.Я предпочитаю функции, которые вообще не возвращают такие структуры, но берут указатель на одну из них и заполняют ее изнутри функции.