在Delphi中通过引用传递的指针(从DLL导入函数)

梅勒92

我想使用在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);

在上面的情况下,使用类似的函数将指针传递给整数,它可以工作,在上述情况下,我有无效的类型转换错误。

范塔基罗科

答案在“参数(Delphi)-值和变量参数”文档中。我的粗体强调:

如果例程的声明指定了var参数,则在调用该例程时,必须传递一个可分配的表达式-即,变量,类型常量(处于{$ J +}状态),解引用的指针,字段或索引变量。


关于您的情况,我的建议是声明一个新类型:

PMlaInfo = ^TMlaInfo;

并更改函数的签名:

function WFS_GetMlaData(AHandle: WFS_HDL; const AMlaInfo: PMlaInfo): Integer stdcall;

但是有一种“ hack ”(取消引用的指针):

PDouble((@MlaList[i].camPitchUm)^)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Delphi中通过引用传递的指针(从DLL导入函数)

来自分类Dev

通过函数中的引用将const指针传递给const

来自分类Dev

C ++通过引用dll中的函数传递std :: string

来自分类Dev

通过引用将指针传递给函数

来自分类Dev

无法通过引用传递从函数返回的指针

来自分类Dev

通过引用在C中传递指针

来自分类Dev

通过JNA调用dll函数,如何处理Java中通过指针传递的地址?

来自分类Dev

通过引用传递指针

来自分类Dev

通过引用传递指针

来自分类Dev

是否应该/可以通过函数中的引用传递智能指针

来自分类Dev

C ++通过构造函数中的引用传递

来自分类Dev

在设备函数 CUDA 中通过引用传递

来自分类Dev

参数在函数中通过引用传递

来自分类Dev

通过引用和指针传递

来自分类Dev

指针并通过引用传递c ++

来自分类Dev

通过asm DLL中的ref指针解引用C#

来自分类Dev

双指针vs通过引用指针传递

来自分类Dev

通过引用和c中的指针传递参数

来自分类Dev

为什么不能在C中通过引用传递指针?

来自分类Dev

在Delphi 5中,是否始终通过引用传递TList参数?

来自分类Dev

将指针传递给接受C ++中的引用的函数

来自分类Dev

作为参数传递时,在函数中更新指针地址。[将指针作为C中的引用传递]

来自分类Dev

通过函数c传递指针

来自分类Dev

在julia函数中:是通过引用还是通过值传递?

来自分类Dev

通过引用将双精度数组从C传递到Delphi DLL

来自分类Dev

函数调用通过引用传递?

来自分类Dev

C ++通过引用函数传递

来自分类Dev

通过引用传递的 Lambda 函数

来自分类Dev

通过引用传递时的指针转换