labwindows: Какой аргумент нужен именно ServerTCPRead?
В документации Labwindows сказано следующее о методе ServerTCPRead:
int ServerTCPRead (unsigned int conversationHandle, void *dataBuffer, size_t dataSize, unsigned int timeOut);
dataBuffer void * Указатель на буфер для хранения данных.
Однако, когда я фактически объявляю указатель и передаю его методу, он возвращается со следующей ошибкой:
FATAL RUN-TIME ERROR: "test1.c", строка 146, столбец 61, идентификатор потока 0x00001474: аргумент массива слишком мал (1 байт). Аргумент должен содержать не менее 60000 байтов (60000 элементов).
Вот код, который я использую:
char * receiveBuf="";
ssize_t dataSize = 60000;
switch (event)
{
case TCP_CONNECT:
break;
case TCP_DATAREADY:
if ((dataSize = ServerTCPRead (g_hconversation, receiveBuf,
dataSize, 1000))
< 0)
{
//SetCtrlVal (g_hmainPanel, MAINPNL_RECEIVE, "Receive Error\n");
}
else
{
display_value_from_client(receiveBuf);
}
break;
1 ответ
Вы выделили receiveBuf как пустую строку, поэтому нет места для хранения данных, которые вы получили бы при вызове функции. Я бы заменил
char * receiveBuf="";
ssize_t dataSize = 60000;
с
ssize_t dataSize = 60000;
char * receiveBuf = malloc(dataSize);
и не забывайте звонить бесплатно позже по мере необходимости.
Также на основании ошибки этот вызов может блокироваться, пока не получит байты dataSize. Вы должны проверить документацию для этого.