一段简单C++代码改成Delphi
typedef void (CALLBACK *LPRETURN_MESSAGE_ROUTINE)
(
IN LPCTSTR lpMessage
);
typedef void (CALLBACK *LPDO_CALLBACK_ROUTINE)
(
IN DWORD wCommand,
IN unsigned char *lpMessage
);
应该是函数指针吧,对C++不是很熟
问题点数:20、回复次数:6Top
1 楼sczyq(我又...........)回复于 2006-02-14 18:40:12 得分 15
type
LPRETURN_MESSAGE_ROUTINE = procedure(lpMessage : LPCTSTR);CALLBACK;
LPDO_CALLBACK_ROUTINE = procedure(wCommand : DWORD; lpMessage : LPCTSTR);CALLBACK;
基本上这种写法的Top
2 楼hmily1688(没什么好说的)回复于 2006-02-15 09:52:19 得分 0
谢谢你的回复,但是这样是编译通过不了的LPRETURN_MESSAGE_ROUTINE = procedure(lpMessage : LPCTSTR);CALLBACK;如果把callback去掉能行。见过LPRETURN_MESSAGE_ROUTINE = procedure(lpMessage : LPCTSTR) of TObject;safecall;这种写法。这个CallBack怎么处理啊Top
3 楼Raiboi()回复于 2006-02-15 12:28:35 得分 0
把CallBack换成stdcall
Top
4 楼hmily1688(没什么好说的)回复于 2006-02-15 12:56:48 得分 0
stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,这跟Callback有啥关系,我的意思是既然我声明的是这个函数的指针,管他是什么回调不回调函数呢。不知道正确与否.如果换的话我也会换成cdecl,cdcel为C++的默认的调用方式。Top
5 楼hmily1688(没什么好说的)回复于 2006-02-15 13:12:29 得分 0
VC中如果写成cdcel是不能被其它语言调用的,看来我得改一下,兄弟们,关于哪个callback我如果不写能成吗? LPRETURN_MESSAGE_ROUTINE = procedure(lpMessage : LPCTSTR);stdcall;Top
6 楼constantine(飘遥的安吉儿)回复于 2006-02-16 12:20:19 得分 5
可以,delphi中是没有callback关键字得,一般我见到得回调函数都是用stdcall
Top




