私はcppプロジェクトに取り組んでいます。プロジェクトを 64 ビットに移行する必要があります。x64 でコンパイルできないインライン アセンブリ コードが含まれています。これは、アセンブリ コードを含む関数です。
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;
}
スタック、アレイを使用してこの「asm push val」を移行しましたが、機能しませんでした。ただし、コンパイルエラーはスローされませんが、ロジックは機能しませんでした。
それで、「__asm push val」の代わりに C++ で何を使用できるかを尋ねたいと思います。どんな助けでも大歓迎です。