1

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

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 和函数原型都更改为 beWINAPI并且我得到了同样的错误。3.按预期
调用工程中的其他函数。 可能值得指出的是,上述所有func 和函数 ptrs 都被编译到主项目链接的库中。ftdiFuncs
ftdi

4

1 回答 1

0

Duh! I was converting GetGPIOs to SetGPIOs !!! Look carefully: SPI_SetGPIOs = reinterpret_cast(SPI_GetGPIOs)

于 2013-10-30T11:14:41.787 回答