Совпадение сигнатур функции при импорте/экспорте из DLL

Насколько мне известно, при использовании extern "C", в DLL не попадает сигнатура экспортируемой функции. То есть, для экспортируемой функции в DLL попадает ее имя и адрес входа.

Для того, чтобы использовать экспортированную функцию, мы получаем адрес входа, используя связанное с адресом входа имя.

Затем, чтобы использовать функцию извне, мы приводим полученный адрес к нужной сигнатуре. И затем - вызываем.

Мой вопрос заключается в следующем: насколько важно совпадение сигнатуры реальной функции, которая находится в DLL, и сигнатуры указателя, через который происходит вызов данной функции извне?

Раньше я думал, что главное - это совпадение количества и размера параметров. Например, извне в функцию передается аргумент типа uint32_t, а внутри DLL данный аргумент имеет тип float. Или int32_t.

Но недавно я узнал, что параметры и возвращаемое значение одинакового размера могут передаваться по-разному.

Значит ли это, что сигнатуры должны совпадать на 100%?

Или же, они могут не совпадать, если учитывать правила вызова и передачи аргументов/возвращаемых значений?


Ответы (0 шт):