Как вызвать функцию с типами, известными во время выполнения - PullRequest
1 голос
/ 08 мая 2020

После загрузки библиотеки Dynami c и GetProcAddress обычно получается указатель на функцию типа void*. Чтобы вызвать функцию, выполняя это во время компиляции, нужно привести указатель к нужному типу указателя.

Однако, если тип неизвестен во время компиляции, а во время выполнения, и есть много возможностей типа. В этом сценарии кажется, что нужно «вызвать» функцию вручную, иначе говоря, обновить стек и регистры в соответствии с ABI.

Вопрос: есть ли какой-нибудь открытый исходный код, который позаботится об этом в общих платформах и ABI? Если нет, то как мне реализовать его самостоятельно?

В документации Microsoft abi есть кое-что о cdecl и других соглашениях, и кажется, что 32-битная и 64-битная версии отличаются. ABI на Linux такой же или что-то еще?

1 Ответ

1 голос
/ 08 мая 2020

В другом ответе я сказал, что https://dyncall.org/ выглядит как то, что нужно.

Этот ответ был удален, несмотря на то, что в комментариях говорилось, что он правильный. Повторная публикация информации здесь на случай, если она понадобится кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...