我在c ++ / cli dll中有一个函数,它由旧的20世纪90年代的应用程序调用。我在函数前使用#pragma managed(push, off)
,在#pragma managed(pop)
之后使用{{1}}来保留堆栈,但只有EBP是push / pop。因此,应用程序会出错(某些寄存器无效)。我通过手动更改dll文件并将必要的push / pop添加到其他寄存器来修复它,这解决了问题,但每次更改内容时都这样做很傻。如何强制它推送/弹出不仅仅是EBP?我想过使用__asm {}但是我不确定它会起作用吗?