我正在尝试在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”指定的参数数量错误 据我所知,参数是一个指针,所以我不明白我做错了什么。 谁可以帮我这个事? 提前致谢 赫尔曼
答案 0 :(得分:1)
使用FPC方言({$MODE OBJFPC}
)编写时,必须使用@
符号明确指定函数指针。
如果没有这个,编译器会认为你想调用函数而不是取其地址。
所以将最后一行重写为
CamRegisterPreviewCallback(@PreviewCallback);
顺便说一下,正如评论中某人所指出的那样,请验证您的TPREVIEW_CALLBACK
原型。您将其声明为of object
,但您将其实现为全局函数,这是一个错误。 of object
实际上意味着该方法必须在类中实现。对象方法的过程变量与自由函数的过程变量不同。在第一种情况下,有一个额外的上下文指针(Self
),所以两者完全不兼容!
如果dll是用C语言编写的,of object
很可能是多余的,但不幸的是,如果没有库API文档,很难说。