DCC Не могу определиться с количеством параметров, которые нужны функции - PullRequest
2 голосов
/ 21 марта 2011

У меня есть функция, объявленная в модуле с этим прототипом:

function MapFunction(process: THANDLE; func: Pointer; size: Cardinal) : Pointer;

, и я вызываю ее так:

stub := MapFunction(proc, remoteStub, 80);

Когда я компилирую, я получаю эту ошибку, которая останавливаетсякомпиляция:

[DCC Error] test.pas (22): E2035 Недостаточно фактических параметров

Я немного поэкспериментировал и решил добавить больше параметровчтобы увидеть, что он думает.Поэтому я назвал это так:

stub := MapFunction(proc, remoteStub, 80, 1, 1, 1, 1, 1);

И тогда DCC сообщает мне, что:

[DCC Error] test.pas (22): E2035 Недостаточно фактических параметров

[DCC Error] test.pas (22): E2034 Слишком много фактических параметров

И комментирование этой строки позволяет устройству успешно компилироваться.

У меня просто естьодин вопрос: Что?

Я должен также упомянуть, что remoteStub является переменной-членом, и этот вызов функции находится внутри члена этого класса.И что этот конкретный метод является шаблонным методом.

Ответы [ 2 ]

8 голосов
/ 21 марта 2011

Вы сообщаете, что строка:

stub := MapFunction(proc, remoteStub, 80, 1, 1, 1, 1, 1);

приводит к двум ошибкам:

[DCC Error] test.pas(22): E2035 Not enough actual parameters
[DCC Error] test.pas(22): E2034 Too many actual parameters

Единственное объяснение, которое имеет смысл:

  • remoteStub - это функция или процедура, которая ожидает параметры - первая ошибка.
  • все дополнительные 1 параметры приводят ко второй ошибке.

Следующий код ведет себя именно так, как вы сообщаетев вашем вопросе и в комментариях к удаленному ответу RRUZ:

function MapFunction(process: THANDLE; func: Pointer; size: Cardinal) : Pointer;
begin
  Result := nil;
end;

var
  remoteStub: procedure(x: Integer);

procedure remoteStub2(x: Integer);
begin
end;

procedure Test;
begin
  remoteStub := remoteStub2;

  //E2035 Not enough actual parameters
  MapFunction(0, remoteStub, 0);
  MapFunction(0, remoteStub2, 0);

  //Compiles and passes the entry point of the procedure
  MapFunction(0, @remoteStub, 0);
  MapFunction(0, @remoteStub2, 0);
end;

Я не могу думать, что еще может объяснить то, что вы сообщаете!

0 голосов
/ 21 марта 2011

Убедитесь, что у вас нет других функций с таким же именем и другой подписью.

Приведенный ниже код дает вам E2035 Not enough actual parameters

program Project41;
{$APPTYPE CONSOLE}
uses SysUtils;

// GetFileVersion also exists in SysUtils
function GetFileVersion(const AFileName: string;extraparam:Integer): Cardinal;
begin
  beep;
end;

begin
  GetFileVersion(ParamStr(0));
end.
...