Donc, je voudrais pouvoir appeler des fonctions à partir d'une DLL C++. Pour certaines raisons, je voudrais les appeler à partir d'un bloc __asm dans mon code C++. Ma question est la suivante: je sais que avant d'appeler la fonction, je dois pousser ses arguments sur la pile dans l'ordre spécifié en appelant convention.However, puis-je faire simplement de la fonction quelque chose comme ceci:Comment puis-je passer des arguments aux fonctions C++ lorsque je les appelle à partir de l'assemblage en ligne
int a=5;
double b = 5.0;
__asm{
push b
push a
call functionAddress
}
Ce qui m'inquiète, c'est que je me souviens que la taille standard d'un assemblage est de 2 octets, alors que la taille d'un int en C++ est habituellement de 4 octets, et de 8 octets pour un double.So, dans l'exemple ci-dessus, suis-je? poussant vraiment la pleine valeur de chaque variable, ou juste le premier couple d'octets? Si le code ci-dessus n'est pas correct, quelle serait la bonne façon de le faire? De plus, si la fonction que nous appelons renvoie un double, où cette valeur est-elle stockée? Je suppose qu'il ne peut pas être dans un registre, car il ne peut stocker que 32 bits (4 octets). Toute aide avec ce désordre serait grandement appréciée :)
Que s'est-il passé lorsque vous l'avez essayé? – Seth
J'ai un problème avec les doubles: je me suis fait une fonction de test dans la dll qui prend un double argument et renvoie 1 si l'entrée est plus grande que 5.0.Le truc c'est que j'ai essayé d'appeler la fonction plusieurs fois avec l'argument 7.45454 et la valeur de retour n'est pas toujours la même. –