回调不编译(指定的参数数量错误

时间:2015-10-20 15:39:42

标签: callback windows-ce lazarus

我正在尝试在WinCE系统上调用dll中的函数。 这是定义


type
  TPREVIEW_CALLBACK = procedure ( pData: PByte; len: long; height: Integer; width: Integer; stride: Integer) of object; cdecl;
  PPREVIEW_CALLBACK = ^TPREVIEW_CALLBACK;
  function camRegisterPreviewCallback(PreviewCallbackProc: PPREVIEW_CALLBACK): Integer; cdecl; external 'CameraAPI.dll';

我使所有函数都是全局的,这是回调(仍为空)


procedure PreviewCallback(pData: PByte; len: long; height: Integer; width: Integer; stride: Integer);
begin
end;

调用(也在全局函数中)是


CamRegisterPreviewCallback(PreviewCallback);

我得到的编译错误是 错误:为调用“PreviewCallback”指定的参数数量错误 据我所知,参数是一个指针,所以我不明白我做错了什么。 谁可以帮我这个事? 提前致谢 赫尔曼

1 个答案:

答案 0 :(得分:1)

使用FPC方言({$MODE OBJFPC})编写时,必须使用@符号明确指定函数指针。

如果没有这个,编译器会认为你想调用函数而不是取其地址。

所以将最后一行重写为

CamRegisterPreviewCallback(@PreviewCallback);

顺便说一下,正如评论中某人所指出的那样,请验证您的TPREVIEW_CALLBACK原型。您将其声明为of object,但您将其实现为全局函数,这是一个错误。 of object实际上意味着该方法必须在类中实现。对象方法的过程变量与自由函数的过程变量不同。在第一种情况下,有一个额外的上下文指针(Self),所以两者完全不兼容!

如果dll是用C语言编写的,of object很可能是多余的,但不幸的是,如果没有库API文档,很难说。