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