그래서 C++ DLL에서 함수를 호출하고 싶습니다. 몇 가지 이유 때문에 저는 C++ 코드의 __asm 블록에서 호출하고 싶습니다. 내 질문은 이것이다 : 나는 함수를 호출하기 전에, 나는 함수의 호출 convention.However에 의해 지정된 순서대로 스택에 인수를 추진한다는 것을 알고, 내가 단순히 같은 것을 수행 할 수 있습니다인라인 어셈블리에서 인수를 호출 할 때 C++ 함수에 인수를 전달하는 방법
int a=5;
double b = 5.0;
__asm{
push b
push a
call functionAddress
}
을
나는 어셈블리의 표준 워드 크기가 2 바이트 인 반면 C++의 int 크기는 대개 4 바이트이고 double은 8 바이트라는 사실을 염려하고 있습니다. 위의 예제에서 나는 실제로 각 변수의 전체 값 또는 바이트의 처음 몇 개를 밀고 있습니까? 위의 코드가 정확하지 않은 경우 올바른 방법은 무엇입니까? 또한 호출하는 함수가 double을 반환하면이 값은 어디에 저장됩니까? 그것은 단지 32 비트 (4bytes)를 저장할 수 있기 때문에 나는 그것이 레지스터에있을 수 없다고 가정합니다.이 엉망으로 어떤 도움이 크게 감사하겠습니다 :)
시도 할 때 어떤 일이 발생 했습니까? – Seth
double에 문제가 있습니다. double 인수를 취하여 입력이 5.0보다 큰 경우 dll에서 테스트 함수를 작성했습니다. 어셈블리에서 함수를 몇 번 호출하려고했습니다. 인수가 7.45454이고 반환 값이 항상 같지는 않습니다. –