linyulun
驱动小牛
驱动小牛
  • 注册日期2002-03-18
  • 最后登录2014-05-09
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望61点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1154回复:6

50分请教一个问题

楼主#
更多 发布于:2002-06-06 11:49
在编译驱动时有这样一个错误:
IoSetCompletionRoutine( R1394_SynchCompletionRoutine,
(PVOID) &Event,
TRUE,
TRUE,
TRUE
);

错误提示:
cannot convert from \'long (__stdcall *)(struct _DEVICE_OBJECT *,struct _IRP *,struct _KEVENT *)\' to \'long (__stdcall *)(struct _DEVICE_OBJECT *,struct _IRP *,void *)\'

这是什么原因,我搞了好久没解决.
drinkeryj
驱动老牛
驱动老牛
  • 注册日期2001-03-23
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-06 12:08
少了一个参数。
以后怎么办? [img]http://www.driverdevelop.com/forum/upload/Xman/2004-04-05_2004324183110706.jpg[/img]
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-06 12:42
看看函数原型:

VOID
  IoSetCompletionRoutine(
  IN PIRP  Irp,
  IN PIO_COMPLETION_ROUTINE  CompletionRoutine,
  IN PVOID  Context,
  IN BOOLEAN  InvokeOnSuccess,
  IN BOOLEAN  InvokeOnError,
  IN BOOLEAN  InvokeOnCancel
  );
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-06 12:56

有两帖?????

迟了吗。。。。。。。。。。。。。

哦。。。。。。。。。。。。




  :(
[color=red]大头鬼! :P[/color]
Tomgin
驱动牛犊
驱动牛犊
  • 注册日期2001-08-08
  • 最后登录2005-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-06 13:03
错误提示:
cannot convert from \'long (__stdcall *)(struct _DEVICE_OBJECT *,struct _IRP *,struct _KEVENT *)\' to \'long (__stdcall *)(struct _DEVICE_OBJECT *,struct _IRP *,void *)\'


看错误提示,应该是你的
R1394_SynchCompletionRoutine 这个函数的原型不对。

你是
long R1394_SynchCompletionRoutine( PDEVICE_OBJECT, PIRP, PKEVENT );

系统要求

long R1394_SynchCompletionRoutine( PDEVICE_OBJECT, PIRP, PVOID );

努力呀,还有许多东西不会呢。
linyulun
驱动小牛
驱动小牛
  • 注册日期2002-03-18
  • 最后登录2014-05-09
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望61点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-06 15:15
to Tomgin :
    可是我已经把它强制转换了阿,怎么办?
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-06-06 18:15
引用:
--------------------------------------------------------------------------------
TO Tomgin 兄:
我看了DDK的例子,里面是这样定义
t1394Diag_SynchCompletionRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PKEVENT Event
)

它编译的时候为什么没错?

不胜感激

--------------------------------------------------------------------------------



嘿嘿,这样看来问题在于你的R1394_SynchCompletionRoutine声明或引用,而不在IoSetCompletionRoutine。

NTSTATUS
(*PIO_COMPLETION_ROUTINE)
(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);

你查一下R1394_SynchCompletionRoutine涉及的地方是否,还有没进行“类型转化”!struct _KEVENT * ---》 void *

应该可解决!

祝好运!

另:

有点糊涂了。。。。。。

是R1394_SynchCompletionRoutine还是t1394Diag_SynchCompletionRoutine???




 :)
[color=red]大头鬼! :P[/color]
游客

返回顶部