Я хочу использовать функцию, объявленную в DLL, которая принимает указатели как параметры ввода/вывода, чтобы заполнить запись параметрами не указателя.Указатели, переданные по ссылке в Delphi (функции импорта из DLL)
Функция из DLL:
function WFS_GetMlaData( handle: WFS_HDL;
mla_idx: Integer;
mla_name: TCharWFSBufferArray;
var cam_pitch_um: PDouble;
var lenslet_pitch_um: PDouble;
var center_spot_offset_x: PDouble;
var center_spot_offset_y: PDouble;
var lenslet_f_um: PDouble;
var grd_corr_0: PDouble;
var grd_corr_45: PDouble): Integer stdcall;
Запись:
MlaInfo = record
i : Integer;
idx : Integer;
name : TCharWFSBufferArray;
camPitchUm : double;
lensletPitchUm : double;
spotOffsetx : double;
spotOffsety : double;
lensletFocalLengthUm : double;
grdCorr0 : double;
grdCorr45 : double;
end;
Вызов функции:
if err = WFS_GetMlaData(handle,
MlaList[i].idx,
MlaList[i].name,
PDouble(MlaList[i].camPitchUm),
PDouble(MlaList[i].lensletPitchUm),
PDouble(MlaList[i].spotOffsetx),
PDouble(MlaList[i].spotOffsety),
PDouble(MlaList[i].lensletFocalLengthUm),
PDouble(MlaList[i].grdCorr0),
PDouble(MlaList[i].grdCorr45)) then MyWFS_HandleErrors(handle, err);
С аналогичной функцией, которая проходит указатели на целое он работает, в вышеприведенном случае У меня есть Недопустимый Typecast Ошибка.
Добро пожаловать в переполнение стека. Вы отметили этот C++, но здесь нет ничего о C++. Возможно, вы хотели включить объявление C++ (возможно, действительно C) этой DLL-функции. Пожалуйста, отредактируйте свой вопрос, чтобы включить это. –
Почему вы изменили ответ, который вы приняли?Ваш текущий выбор предлагает решение, которое вы не можете реализовать (потому что вам не разрешено изменять функцию DLL), а затем предлагает сомнительный тип-бросок, который, вероятно, компилируется только при отключенной опции «typed @ operator» (который плохая идея). Ваш предыдущий выбранный предложил два изменения, которые вы могли бы сделать, и это даст вам более чистый код. –