This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP432E401Y:在 C++、LWIP TCP 中将回调函数声明为类的成员函数。

Guru**** 2046040 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/959901/msp432e401y-declaring-callback-functions-as-member-function-of-a-class-in-c-lwip-tcp

器件型号:MSP432E401Y

设置回调函数时出错、我尝试将 TCP 添加到现有 C++代码、我想将回调函数放入我的类中。

 我遇到错误:

获取成员函数地址的非标准形式

"void (ModemManager:*)(void *、err_t)"类型的参数与"tcp_err_fn"类型的参数不兼容

调用 tcp_recv (newpcb、eco_recv)时;

以下是我的代码:

ERR_t ModemManager:::echo 接受(void *arg、struct tcp_pcb * newpcb、err_t err)

ERR_t RET_ERR;
静态结构 echo_state *es;
LWIP_unused_arg (arg);
LWIP_Unused_ARG (错误);

/*通常观察到的脊医调用 tcp_setprio(),为什么? *
tcp_setprio (newpcb、tcp_PRIO_min);
// ModemOn = true;
ES =(struct echo_state *) mem_malloc (sizeof (struct echo_state));
if (es!= NULL)

ES->state = ES_Accepted;
ES->PCB = newpcb;
ES->重试次数= 0;
ES->p = NULL;
/*将新分配的调用传递给我们的回调*/

tcp_arg (newpcb、es);
tcp_recv (newpcb、echo_recv); //此处出现错误
tcp_err (newpcb、echo_error); //此处出现错误
tcp_sent (newpcb、echo_sent);//此处出现错误


char modemtest[3]={'a'、'C'、'K'};
char *ptrdata = modemtest;
tcp_write (newpcb、ptrdata、3、1);
//ModemOn = true;

RET_ERR = ERR_OK;

其他

RET_ERR = ERR_MEM;

返回 RET_ERR;

Class ModemManager:公共经理

公共:
ModemManager();
Virtual ~ModemManager();
空进程(TransitPack::PacketType 类型,向量 data、struct tcp_pcb * tpcb);
ERR_t ECHO_ACCEPT (void *arg、struct tcp_pcb * newpcb、err_t err);
void echo_init (void);
ERR_t ECHO_recv (void *arg、struct tcp_pcb、struct pbuf *p、err_t err);
void echo_error (void *arg、err_t err);
ERR_t ECHO_SENT (void *arg、struct tcp_pcb、u16_t len);

enum ECHO_States

ES_NONE = 0、
ES_Accepted、
ES_Received、
ES_Closing
};

struct echo_state

U8_t 状态;
U8_t 重试;
struct tcp_pcb *pcb;
/*要回收的 pbuf (链)*/
struct pbuf *p;
};

};