【发布时间】:2013-05-20 22:55:35
【问题描述】:
我遇到了一个奇怪的问题...我正在尝试实现 Windows Vista+ 的恢复 API。 基本上它有效。但每次我尝试调用“RegisterApplicationRecoveryCallback”时,我都会收到 StackImbalance 异常。
通常你可以忽略它,但如果我在没有调试器的情况下运行程序,它会因为堆栈上的缓冲区溢出或类似的东西而崩溃......
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate uint ApplicationRecoveryCallback(object pvParameter);
[DllImport("kernel32.dll", CallingConvention = CallingConvention.Winapi)]
public static extern uint RegisterApplicationRecoveryCallback([MarshalAs(UnmanagedType.FunctionPtr)]ApplicationRecoveryCallback pRecoveryCallback,
object pvParameter,
uint dwPingInterval,
uint dwFlags);
这是我的 PInvoke 实现。 这是我的电话:
result = RecoveryAPI.RegisterApplicationRecoveryCallback(ApplicationRecovery, null, 5000, 0);
这行不通。我已经尝试将约定设置为 CDecl 以及 ThisCall。没有任何效果...
谢谢 回复
【问题讨论】:
-
尝试将
object参数更改为 ApplicationRecoveryCallback 和 RegisterApplicationRecoveryCallback 为IntPtr。我猜测编组器不会将object直接编组为指针的大小。 -
同样的问题......仍然是堆栈不平衡 -.-