@memradar

Как перевести не обязательные параметры с С на Delphi?

При переводе функций с С на Delphi столкнулся с интересным моментом, в заголовочном файле на С, есть вот такое объявление функции:
5cc9593b7830a385091610.png
Вопрос, как правильно реализовать эту функцию на Delphi (мой вариант, только первых два параметра) ?
function Vix_GetProperties(handle: VixHandle;
                           firstPropertyID: VixPropertyID
                           ): VixError; cdecl; external 'vix.dll';

К сожалению, не нашел примеров, как переносить такие вещи '...' как параметр из С на Delphi...
  • Вопрос задан
  • 180 просмотров
Решения вопроса 1
@memradar Автор вопроса
function Vix_GetProperties(
  handle: VixHandle;
  firstPropertyID: VixPropertyID
): VixError; cdecl varargs; external 'vix.dll';


После cdecl добавляем varargs. Это позволяет в удаленную библиотеку , указать компилятору что можем передавать аргументы списком.

Всем спасибо большое!
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Только передачей параметров в массиве.
procedure TForm1.Display(X: array of const);
var
  I: Integer;
begin
  for I := Low(X) to High(X) do
  ...
end;

Display([42, 1.234, 'A', 'Васек Трубачев', Form1, TButton]);
Ответ написан
Комментировать
profesor08
@profesor08
Задай необязательным значение по умолчанию. А по коду посмотри вызовы этой функции, чтоб понять как она работает и как обрабатывать эти параметры.
procedure DoSomething(one : string; two: integer = 0; three: integer = 0);
Ответ написан
Комментировать
tsklab
@tsklab
Здесь отвечаю на вопросы.
Vix_GetProperties работает аналогично WriteLn с списком.
Predefined constants, types, procedures, and functions (such as True, Integer, or Writeln) do not have actual declarations.Instead they are built into the compiler and are treated as if they were declared at the beginning of the System unit.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы