我想使用在DLL中聲明的函數,該函數以指針作爲in/out參數來填充非指針參數的記錄。從DLL在Delphi中通過引用傳遞的指針(從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);
隨着其穿過指針整數它的工作原理類似的功能,在上述的情況下我有無效的類型轉換錯誤。
歡迎來到Stack Overflow。你標記了這個C++,但這裏沒有關於C++的東西。也許你打算包含這個DLL函數的C++(可能是真正的C)聲明。請[編輯]你的問題,包括這一點。 –
你爲什麼改變你接受的答案?你當前的選擇建議你不能實現的解決方案(因爲你不允許改變DLL函數),然後建議一個可疑的類型轉換,可能只有在你禁用「typed @ operator」選項時纔會編譯(這是一個壞主意)。你之前的選擇提供了兩個你可以做的改變,它可以工作並給你更清晰的代碼。 –