我没有类函数成员的问题。我想在新的组件单元中使用这些功能,但它们不能在组件单元中工作!
这两个函数必须分配给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;
答案 0 :(得分:1)
我不清楚你的问题是什么,但我猜是:
1)也许你在旧版本的Delphi中写了一些代码(你的标签甚至可能是古老的东西,比如Delphi 7)
2)您的代码正在使用“函数指针”
3)您的代码可能正在尝试使用类方法指针混合使用独立函数(例如function1和function2)的''匹配函数指针。
如果是这样,你就不能这样做:)
这是Delphi函数指针的一个很好的链接。它应该100%适用于Delphi XE2:
答案 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