【问题标题】:Run-Time Check Failure #0 - (The value of ESP was not properly saved) - when calling function as stored in a structure运行时检查失败 #0 -(ESP 的值未正确保存)-调用存储在结构中的函数时
【发布时间】:2013-10-30 10:50:49
【问题描述】:

我在这里检查了其他解决方案,但它们似乎并不适用。 我将函数原型声明为:

typedef FTC_STATUS(CALLBACK *SPI_SetGPIOsFuncPtr)(FTC_HANDLE ftHandle);

这些在我的结构中是这样使用的:

struct FTDIFuncs
{
SPI_SetGPIOsFuncPtr SPI_SetGPIOs;
    plus other functions
}

有问题的函数定义如下:

FTC_STATUS WINAPI SPI_SetGPIOs(FTC_HANDLE ftHandle);

函数被分配给这样的结构:

ftdiFuncs.SPI_SetGPIOs = reinterpret_cast<SPI_SetGPIOsFuncPtr>(SPI_GetGPIOs);

函数是这样调用的:

status = ftdiFuncs->SPI_SetGPIOs(ftcHandle)

但是,在返回时,我得到如上所述的运行时错误。 明显的检查:
1.函数ptr typedef和函数本身的args相同
2.CALLBACKWINAPI都定义为__stdcall。在任何情况下,我都将 typedef 和函数原型都更改为 WINAPI,我得到了同样的错误。
3.调用ftdiFuncs中的其他函数按预期工作。
可能值得指出的是,上面所有的ftdi funcs 和 function ptrs 都被编译到主项目链接的库中。

【问题讨论】:

  • 您正在使用reinterpret_cast。如果签名匹配,则不需要它。它可能掩盖了真正的错误。取出来会出现什么错误?
  • 谢谢!这解决了问题。等等....我有一个错字,并且在演员阵容中转换了错误的功能!呵呵!

标签: c++ c visual-studio-2010 function


【解决方案1】:

呃!我正在将 GetGPIOs 转换为 SetGPIOs !!! 仔细地看: SPI_SetGPIOs = reinterpret_cast(SPI_GetGPIOs)

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 2012-01-25
    • 2012-04-22
    • 2011-01-26
    • 2010-11-30
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    相关资源
    最近更新 更多