gpt4 book ai didi

c++ - 访问属于 WiFi 监听器回调成员函数的类的成员

转载 作者:行者123 更新时间:2023-11-28 07:58:06 25 4
gpt4 key购买 nike

我有一个 WiFi 监听器注册为具有固定的第 3 方接口(interface)的回调(指针函数)。我使用函数的静态成员来注册回调函数,然后该静态函数通过静态转换调用非静态成员。主要问题是我不能用我类(class)的任何成员接触生成的 char * buff,我什至不能更改也是我类(class)成员的 int 标志。所有这些都会导致运行时访问冲突。我能做些什么?请在下面查看我的一些代码。其他问题在代码后面说明。

void *pt2Object;

TextWiFiCommunication::TextWiFiCommunication()
{
networkDeviceListen.rawCallback = ReceiveMessage_thunkB;
/* some other initializing */
}

int TextWiFiCommunication::ReceiveMessage_thunkB(int eventType, NETWORK_DEVICE *networkDevice)
{
if (eventType == TCP_CLIENT_DATA_READY)
static_cast<TextWiFiCommunication *>(pt2Object)->ReceiveMessageB(eventType,networkDevice);
return 1;
}
int TextWiFiCommunication::ReceiveMessageB(int eventType, NETWORK_DEVICE *networkDevice)
{
unsigned char outputBuffer[8];
// function from an API that reads the WiFi socket for incoming data
TCP_readData(networkDevice, (char *)outputBuffer, 0, 8);
std::string tempString((char *)outputBuffer);
tempString.erase(tempString.size()-8,8); //funny thing happens the outputBuffer is double in size and have no idea why
if (tempString.compare("facereco") == 0)
cmdflag = 1;
return 1;
}

所以我无法在运行时更改变量 cmdflag 而不会发生访问冲突。我不能将 outputBuffer 声明为类成员,因为没有任何内容写入它,所以我必须在函数内完成它。我无法将 outputBuffer 复制到我的类的字符串类型成员。调试器向我展示了 strlen.asm 代码。不知道为什么。我该如何解决这个问题?我好像被囚禁在ReceiveMessageB这个函数里了。

提前致谢!

其他一些奇怪的问题包括:即使我调用大小为 8 的缓冲区。当我使用 outputBuffer 并用它初始化一个字符串时,该字符串的大小为 16。

最佳答案

您可能会遇到访问冲突,因为 p2tObject 没有指向有效对象而是指向垃圾。 p2tObject 什么时候初始化?它指向什么?

为此,您的代码应如下所示:

...
TextWifiCommunication twc;
p2tObject = reinterpret_cast<void*>(&twc);
...

关于字符串错误,TCP_readData 不太可能以 null 终止您提供的字符数组。 C 字符串以第一个“\0”(空)字符结束。当您将 C 字符串转换为 std::string 时,std::string 从 C 字符串指针复制字节,直到它找到空终止符。在您的情况下,它恰好在 16 个字符后找到它。

要从 TCP 字节流中读取最多 8 个字符,缓冲区的长度应为 9 个字符,并且缓冲区的所有字节都应初始化为 '\0':

...
unsigned char outputBuffer[9] = { 0 };
// function from an API that reads the WiFi socket for incoming data
TCP_readData(networkDevice, (char *)outputBuffer, 0, 8);
std::string tempString((char *)outputBuffer);
...

关于c++ - 访问属于 WiFi 监听器回调成员函数的类的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12224476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com