运行时检查失败#0 - (ESP的值没有正确保存) - 当调用存储在结构中的函数时

时间:2013-10-30 10:50:49

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

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

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函数和函数ptrs都被编译到主项目链接的库中。

1 个答案:

答案 0 :(得分:0)

咄!我正在将GetGPIO转换为SetGPIO! 仔细看: SPI_SetGPIOs = reinterpret_cast(SPI_GetGPIOs)