Когда компилятор жалуется на то, как вы передаете параметр, первое, что вам нужно знать, это то, что ожидает параметр. Поэтому вам стоит взглянуть на объявление Send
. Если просмотр декларации не сразу дает вам представление о том, что нужно исправить, вам нужно включить эту декларацию в код, который вы публикуете в своем вопросе.
Я подозреваю , что это на самом деле не имеет ничего общего с увеличением указателя. Вместо этого компилятор жалуется на третий параметр, где вы пытаетесь передать выражение size-dwError
. Я думаю, что параметр объявлен так:
var buffersize: Word;
Функция планирует предоставить новое значение для этого параметра - это то, что означает var
, поэтому то, что вы передаете этому параметру, должно быть чем-то, что может получить значение. Вы не можете присвоить новое значение результату вычитания двух переменных.
Посмотрите, где компилятор пожаловался на эту строку. Разве он не поместил курсор где-то рядом с третьим параметром? Это подсказка, что проблема есть.
Уменьшить size
, а затем передать его функции.
Dec(size, dwError);
Inc(dwError, Send(s, Ptr(cardinal(buffer) + dwError), size, 0));
Почему вы хотите добавить еще одну строку? Вы достигли своей квоты на этот день? Линии дешевы; не бойтесь использовать два, чтобы выразить себя, когда один не будет делать. Аналогично для переменных. Когда ваш код не работает, сохранение байта или двух вообще не имеет значения.
По крайней мере, вы должны были добавить больше строк, чтобы отследить источник проблемы. Если у вас есть одна строка кода, которая выполняет несколько независимых вычислений (например, получение нового значения указателя, получение нового размера и вызов функции), разбейте строку на несколько отдельных частей. Таким образом, если с одним из них возникнет проблема, и компилятор пожалуется, вы точно будете знать, какой из них виноват.