我在非托管 Win32 DLL 中有一个函数,它接受可变数量的参数,因此需要使用__cdecl
而不是__stdcall
任何其他调用约定。目前我正在显式链接到 DLL(也就是说,我正在使用LoadLibrary
而GetProcAddress
不是链接到 DLL 的.lib
文件)。
我可以很好地调用该函数,但是因为cdecl
我需要在每次调用后添加以下内联汇编指令:
retVal = addVecs(v1, v2, v3, v4);
__asm add esp, 64 ;Sizeof VECTOR struct is 16 bytes
printf("The sum of all these vectors is:\n\tMagnitude: %f\n\tDirection (radians): %f\n\n", retVal.mag, retVal.dir);
如果我不包含内联程序集,那么程序在调用 addVecs 后会崩溃。
有什么方法可以编写 EXE 或 DLL,从而不需要内联汇编指令?例如,printf
它也是一个__cdecl
函数,但我不需要编写内联汇编来确保在每次调用后清理堆栈。