Konwertuj kod zespołu inline do C ++

Pracuję nad projektem cpp. Projekt należy migrować do 64-bitowego. Zawiera pewien kod zespołu Inline, który nie może się skompilować na x64. Jest to funkcja, która zawiera kod zespołu:

void ExternalFunctionCall::callFunction(ArgType resultType, void* resultBuffer)
{
#if defined(_NT_) || defined(__OS2__)

    // I386

    // just copy the args buffer to the stack (it's already layed out correctly)
    int* begin = m_argsBegin;
    int* ptr = m_argsEnd;
    int arr[1000], i=0;
    while (ptr > begin) {
        int val = *(--ptr);

        __asm push val
    }

    void* functionAddress = m_functionAddress;

    // call the function & handle the return value.  use __stdcall calling convention
    switch (resultType) {
    case voidType:
        __asm {
            call functionAddress
        }
        break;
    case pointerType:
    case int32Type:
        __asm {
            call functionAddress
            mov ebx, resultBuffer
            mov dword ptr [ebx],eax
        }
        break;
    case floatType:
        __asm {
            call functionAddress
            mov ebx, resultBuffer
            fstp dword ptr [ebx]
        }
        break;
    case doubleType:
        __asm {
            call functionAddress
            mov ebx, resultBuffer
            fstp qword ptr [ebx]
        }
        break;
    }

Użyłem stosu, tablicy do migracji tego „asm push val”, ale nie zadziałało. Chociaż, nie rzuca żadnego błędu kompilacji, ale logika nie działała.

Chcę więc zapytać, czego mogę używać w C ++ zamiast „__asm ​​push val”. Każda pomoc zostanie doceniona.

questionAnswers(3)

yourAnswerToTheQuestion