delphi - 我可以将类/记录方法链接到外部模块吗?

标签 delphi

在 Delphi 中,我可以像这样链接到外部代码:

   {$L 'C:\Users\Johan\Documents\Embarcadero\Studio\Projects\Life64\Lazarus\lib\x86_64-win64\AVXGenerate.o'}

function GenerateQtoP_AVX_32(main, N,W,NW: pointer): byte;
  external name 'AVXGENERATE_$$_GENERATEQTOP_AVX_32$POINTER$POINTER$POINTER$POINTER$$BYTE';
function GeneratePtoQ_AVX_32(main, S,E,SE: pointer): byte;
  external name 'AVXGENERATE_$$_GENERATEPTOQ_AVX_32$POINTER$POINTER$POINTER$POINTER$$BYTE';
procedure ReverseBitsInAllBytes(ReverseMe: pointer);
  external name 'AVXGENERATE_$$_REVERSEBITSINALLBYTES$POINTER';

在本例中,它链接到我在 Lazarus 中编写的 AVX2 汇编代码。

有没有办法以这种方式链接类或记录的成员方法?

类似于以下伪代码:

type
  TMyRec = record
  public
    procedure DoSomething(x,y: integer) = ExternalMethod;

最佳答案

不可能做你想做的事。我认为也许您可以管理的最接近的方法是通过汇编器跳转到外部函数来实现该方法:

type
  TMyRec = record
  public
    procedure DoSomething(x, y: integer);
  end;

procedure MyRecDoSomething(var Self: TMyRec; x, y: integer); external;

procedure TMyRec.DoSomething(x, y: integer);
asm
  JMP MyRecDoSomething
end;

或者您可以创建一个内联方法:

type
  TMyRec = record
  public
    procedure DoSomething(x, y: integer); inline;
  end;

procedure MyRecDoSomething(var Self: TMyRec; x, y: integer); external;

procedure TMyRec.DoSomething(x, y: integer);
begin 
  MyRecDoSomething(Self, x, y);
end;

当调用TMyRec.DoSomething时,有一个调用,然后跳转到第一个版本(使用asm)。对于第二个版本(使用内联),有一个直接调用外部函数的方法。

关于delphi - 我可以将类/记录方法链接到外部模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53337621/

相关文章:

delphi - 当面板大小更改时,如何将控件保留在面板的底部或右侧?

xml - 如何在Delphi 2009中解析此XML字符串?

delphi - 如何根据屏幕上的 X、Y 坐标返回颜色?

delphi - 自定义 Firemonkey 样式 - 在控件和样式之间链接属性?

c++ - Varargs类方法头转换错误

delphi - HTTPS 帖子 - 我做错了什么?

delphi - 条形码扫描仪和表单的默认按钮

delphi - Delphi中单元的使用顺序

Delphi:WSAAddressToString 返回错误代码 10022 (WSAEINVAL)

delphi - Indy 11 - 您想看到什么功能?