Delphi XE2:如何在组件单元中定义不是类函数的成员

时间:2011-11-21 02:52:53

标签: delphi delphi-xe2

我没有类函数成员的问题。我想在新的组件单元中使用这些功能,但它们不能在组件单元中工作!

这两个函数必须分配给dll中的另一个函数作为参数。

当我在主窗体中使用这两个函数(不是类的成员)时它们可以工作但是在新的组件单元中,dll函数不能再回调这两个函数了!我该如何解决这个问题?这是delphi的错误吗?因为我使用的是Delphi XE Update 2,这是delphi的最新版本,也许这是一个bug!

  TComp12 = class(TCustomPanel)
  private
  ....
  protected
  ....
  public
  ....
  end;

  function function1(opaque: Pointer; plane: Pointer): Pointer; cdecl;
  function function2(opaque: Pointer; picture: Pointer; plane: Pointer) : Pointer; cdecl;

procedure Register;

implementation


procedure Register;
begin
  RegisterComponents('Comp1', [TComp12]);
end;

function function1(opaque: Pointer; plane: Pointer): Pointer; cdecl;
begin
......
end;
function function2(opaque: Pointer; picture: Pointer; plane: Pointer) : Pointer; cdecl;
begin
......
end;

3 个答案:

答案 0 :(得分:1)

我不清楚你的问题是什么,但我猜是:

1)也许你在旧版本的Delphi中写了一些代码(你的标签甚至可能是古老的东西,比如Delphi 7)

2)您的代码正在使用“函数指针”

3)您的代码可能正在尝试使用类方法指针混合使用独立函数(例如function1和function2)的''匹配函数指针。

如果是这样,你就不能这样做:)

这是Delphi函数指针的一个很好的链接。它应该100%适用于Delphi XE2:

http://delphi.about.com/od/objectpascalide/a/pointers.htm

答案 1 :(得分:1)

我查看了你的代码,这不是Delphi中的错误。

以下代码中存在错误:

function VLCLock(opaque: Pointer; plane: Pointer): Pointer; cdecl;
var
  ctx: TCTX;
begin
  ctx := TCTX(opaque);
  Pointer(plane^) := @(ctx.FBuffer.StartLine[0]);
  Result := nil;
end;

TCTX(opaque)应为TCTX(opaque^)。您必须修复代码中的所有类似事件。

答案 2 :(得分:0)

是的,这是一个delphi XE2错误,他们接受这个问题为bug http://qc.embarcadero.com/wc/qcmain.aspx?d=101180