Как мне обернуть нестандартное соглашение о вызовах в C? - PullRequest
3 голосов
/ 26 октября 2010

Не вдаваясь в подробности, скажем, мне нужно использовать нестандартное соглашение о вызовах из C-кода.Функции, использующие это соглашение, могут возвращать несколько значений в стеке.Было бы просто поместить каждую функцию в оболочку, которая использует встроенную сборку для выполнения вызова, отправляя вывод через параметры указателя, переданные оболочке.К сожалению, это решение не очень хорошо обобщает, и мне нужно что-то, что работает в общем случае.Должен ли я просто отказаться от использования макросов для инкапсуляции обертки, или есть более общий способ написания, скажем, переменной invoke функции, которая обрабатывает грязную работу по управлению стеком?

1 Ответ

3 голосов
/ 26 октября 2010

Какой бы подход вы ни выбрали, вам нужно написать обертку в сборке.Нет никакого способа возиться со стеком из C. Мне нравится ваша идея написать одну invoke оболочку (в asm), которая выполняет всю грязную работу, и затем обернуть это с C.

...