Итак, я хотел бы иметь возможность вызывать функции из dll C++. По определенным причинам я хотел бы назвать их из блока __asm в моем коде на C++. Мой вопрос заключается в следующем: я знаю, что, прежде чем я вызываю функцию, я должен выдвинуть свои аргументы в стек в порядке, определенном с помощью функции призвании convention.However, может я просто сделать что-то вроде этого:Как передать аргументы в функции C++, когда я их вызываю из встроенной сборки
int a=5;
double b = 5.0;
__asm{
push b
push a
call functionAddress
}
Меня беспокоит тот факт, что я, кажется, помню, что стандартный размер слова в сборке составляет 2 байта, а размер int в C++ обычно составляет 4 байта и 8 байтов для double.So, в приведенном выше примере, я действительно толкает полное значение каждой переменной или только первые пару байтов? Если приведенный выше код неверен, каков был бы правильный способ сделать это? Кроме того, если функция, которую мы вызываем, возвращает double, где это значение сохраняется? Я предполагаю, что он не может быть в реестре, потому что он может хранить только 32 бита (4 байта). Любая помощь с этим беспорядком была бы очень признательна :)
Что произошло, когда вы попробовали? – Seth
У меня проблема с двойниками: я сделал себе тестовую функцию в dll, которая принимает двойной аргумент и возвращает 1, если вход больше 5.0. Дело в том, что я несколько раз пытался вызвать функцию из сборки с аргументом 7.45454, а возвращаемое значение не всегда одно и то же. –