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.