Delphi XE2: как определить не являющиеся членами класса функции в компонентном модуле - PullRequest
0 голосов
/ 21 ноября 2011

У меня проблема с не членами класса функций.Я хочу использовать эти функции в новом компонентном модуле, но они не работают в компонентном модуле!

эти две функции должны назначаться другой функции в dll в качестве параметра.

Когда я использовал эти 2 функции (не члены класса) в основной форме, они могут работать, но в новом модуле компонентафункция dll больше не может вызывать эти две функции!Как я могу решить эту проблему?Это ошибка Delphi?потому что я использую Delphi XE Update 2, это последняя версия delphi, возможно, это ошибка!

  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 ]

1 голос
/ 23 ноября 2011

Я посмотрел ваш код, и это не ошибка в 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^). Вы должны исправить все подобные случаи в вашем коде.

1 голос
/ 21 ноября 2011

Мне непонятно, в чем ваш вопрос, но я предполагаю:

1) возможно, вы написали какой-то код в более старой версии Delphi (ваши теги предполагают, возможно, даже что-то древнее, например Delphi 7)

2) Ваш код использует «указатели функций»

3) Ваш код может пытаться смешивать указатели функций n'match для отдельных функций (таких как function1 и function2, дляпример) с указателями на методы класса.

Если это так, вы не можете сделать это:)

Вот хорошая ссылка на указатели на функции Delphi.Это должно быть на 100% применимо к Delphi XE2:

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

0 голосов
/ 21 ноября 2011

Да, это ошибка Delphi XE2, они принимают эту ошибку за ошибку http://qc.embarcadero.com/wc/qcmain.aspx?d=101180

...