vc写的dll里面有一个函数,不知delphi怎么声明 ( 积分: 100 )

  • 主题发起人 主题发起人 cnhero
  • 开始时间 开始时间
C

cnhero

Unregistered / Unconfirmed
GUEST, unregistred user!
server.dll 配的 server.h文件里面的函数声明是这样的:

CPLAYER_API void __stdcall MP4_ServerSetStart(void(CALLBACK *StartCap)(int nChannel));


我要在delphi7里面使用这个函数,要怎么声明呢?

那个callback好奇怪啊!
原帖来自于网易社区:http://p5.club.163.com/viewArticleByWWW.m?boardId=delphi&articleId=delphi_1027f5f046105c6
 
server.dll 配的 server.h文件里面的函数声明是这样的:

CPLAYER_API void __stdcall MP4_ServerSetStart(void(CALLBACK *StartCap)(int nChannel));


我要在delphi7里面使用这个函数,要怎么声明呢?

那个callback好奇怪啊!
原帖来自于网易社区:http://p5.club.163.com/viewArticleByWWW.m?boardId=delphi&articleId=delphi_1027f5f046105c6
 
type
TStartCap = procedure(nChannel: Integer);
procedure MP4_ServerSetStart(StartCap: TStartCap)
stdcall
external 'server.dll'
 
function _MP4_ServerSetStart(StartCap: nChannel: Integer): Integer
stdcall
external 'Server.dll';
 
應該是樓上的對。
 
补充一下:
type
TStartCap = procedure(nChannel: Integer);stdcall;
procedure MP4_ServerSetStart(StartCap: TStartCap)
stdcall
external 'server.dll';
 
感谢大家的帮助!

MP4_ServerSetStart(CallBack: CallBackStartCap)



MP4_ServerSetStart是声明了,那startCap在哪里声明呀?

type
CallBackStartCap = procedure (nChannel: Integer)
stdcall

这表示 CallBackStartCap 是个类型,不是函数是么?

那startCap是函数,不必另外声明么?
还是在DLL里面人家都做好了?
 
amli说得对,我的那个少了个stdcall.
 
兄弟,回调函数需要你自己定义的,那个DLL中的函数需要的是一个函数类型的参数:

声明(在窗体中加入):
private
procedure ACallBack(nChannel: Integer)
stdcall;

实现:
procedure TForm1.ACallBack(nChannel: Integer);
begin
//在这个函数中加入你想做的事
ShowMessage('Channel:' + IntToStr(nChannel));
end;

调用:
MP4_ServerSetStart(ACallBack);
当然,你不需要回调动作则像如下方式调用:
MP4_ServerSetStart(nil);
 
多人接受答案了。
 
后退
顶部