Tak, chciałbym móc wywoływać funkcje z biblioteki dll C++. Z pewnych powodów chciałbym wywołać je z bloku __asm w moim kodzie C++. Moje pytanie jest takie: Wiem, że przed I wywołania funkcji, muszę wcisnąć swoje argumenty na stosie w kolejności określonej przez funkcję wzywającej convention.However, mogę po prostu zrobić coś takiego:Jak przekazywać argumenty do funkcji C++, gdy wywołuję je z wbudowanego zestawu
int a=5;
double b = 5.0;
__asm{
push b
push a
call functionAddress
}
To, co mnie martwi, to fakt, że wydaje mi się, że standardowy rozmiar słowa w zestawie to 2 bajty, podczas gdy rozmiar int w C++ to zwykle 4 bajty, a 8 bajtów za podwójne. W powyższym przykładzie jestem naprawdę przesuwając pełną wartość każdej zmiennej lub tylko pierwszych kilku bajtów? Jeśli powyższy kod nie jest poprawny, jaki byłby właściwy sposób, aby to zrobić? Ponadto, jeśli funkcja, którą wywołujemy, zwraca wartość podwójną, gdzie jest przechowywana ta wartość? Zakładam, że nie może być w rejestrze, ponieważ może przechowywać tylko 32bity (4 bajty). Każda pomoc w tym bałaganie byłaby bardzo doceniana :)
Co się stało, gdy próbowałeś? – Seth
Mam problem z dublami: Zrobiłem sobie funkcję testową w bibliotece dll, która przyjmuje podwójną argumentację i zwraca 1, jeśli wejście jest większe niż 5.0. Chodzi o to, że próbowałem wywołać funkcję z zestawu kilka razy z argumentem 7.45454 i zwracana wartość nie zawsze jest taka sama. –