したがって、C++ dll から関数を呼び出せるようにしたいと考えています。特定の理由から、C++ コードの __asm ブロックからそれらを呼び出したいと考えています。私の質問は次のとおりです。関数を呼び出す前に、関数の呼び出し規則で指定された順序で引数をスタックにプッシュする必要があることはわかっています。
int a=5;
double b = 5.0;
__asm{
push b
push a
call functionAddress
}
私が心配しているのは、アセンブリの標準のワード サイズが 2 バイトであるのに対し、C++ の int のサイズは通常 4 バイトであり、double の場合は 8 バイトであることを覚えているように見えるという事実です。各変数の完全な値をプッシュしますか、それとも最初の数バイトだけをプッシュしますか? 上記のコードが正しくない場合、正しい方法は何でしょうか? また、呼び出している関数が double を返す場合、この値はどこに保存されますか? 32ビット(4バイト)しか保存できないため、レジスタに入れることはできないと思います。この混乱の助けがあれば大歓迎です:)