【发布时间】:2011-11-18 14:16:24
【问题描述】:
我有一个 x86 DLL(我没有源代码),我需要从 C++ 程序 (VC++ 10) 调用它。
我被告知调用约定是从左到右的,前三个参数在 EAX、ECX 和 EDX 寄存器中传递,并且被调用者堆栈清理(以及浮点参数/返回等其他细节)。
是否有某种方法可以自动执行此操作(例如,从包含数百个函数定义中的每一个的文件生成,或者更好地“告诉”编译器有关约定),以便我可以正常调用这些函数?如果有帮助的话,使用的类型都是不错的简单类型(void、int、char*、float 等)。
【问题讨论】:
-
澄清一下,自定义进入和退出代码 = 您自己的汇编代码,从受支持的调用约定适应到不受支持的调用约定。
-
那是在你到达那里之后在被调用函数中做一些事情吗?但我需要在呼叫现场做点什么?
-
到达那里之后,理论上您可以操作寄存器和堆栈,以便在被调用函数运行时(即紧随其后),它会根据需要找到它们。与操纵调用约定没有概念上的区别。
标签: c++ visual-c++ x86 calling-convention