阅读:1340回复:9
50分请教一个错误问题
在编译驱动时有这样一个错误:
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 *)\' 这是什么原因,我搞了好久没解决. |
|
沙发#
发布于:2002-06-06 12:50
在编译驱动时有这样一个错误: linyulun兄: VOID IoSetCompletionRoutine ( IN PIRP Irp, IN PIO_COMPLETION_ROUTINE CompletionRoutine, IN PVOID Context, IN BOOLEAN InvokeOnSuccess, IN BOOLEAN InvokeOnError, IN BOOLEAN InvokeOnCancel ); 你上面的好像是少了个:IN PIRP Irp 项哦! 如不是此问题,则建议先“删除”其他的中间编译结果(文件)后,再来。 祝好运! 嘿嘿,50分吗?。。。。。。。。。。。 :) |
|
|
板凳#
发布于:2002-06-06 12:50
VOID
IoSetCompletionRoutine( IN PIRP Irp, IN PIO_COMPLETION_ROUTINE CompletionRoutine, IN PVOID Context, IN BOOLEAN InvokeOnSuccess, IN BOOLEAN InvokeOnError, IN BOOLEAN InvokeOnCancel ); 你应该如此使用: IoSetCompletionRoutine(Irp, R1394_SynchCompletionRoutine, (PVOID) &Event, // pass the context array element to completion routine TRUE, // invoke on success TRUE, // invoke on error TRUE); // invoke on cancellation of the Irp |
|
|
地板#
发布于:2002-06-06 13:02
错误提示:
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 ); |
|
|
地下室#
发布于:2002-06-06 15:25
不好意思,我传问题是写错了
IoSetCompletionRoutine(Irp, R1394_SynchCompletionRoutine, (PVOID) &Event, TRUE, TRUE, TRUE); 问题还在,(PVOID) &Event 这个类型不能强制转换吗? |
|
5楼#
发布于:2002-06-06 15:34
TO Tomgin 兄:
我看了DDK的例子,里面是这样定义 t1394Diag_SynchCompletionRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PKEVENT Event ) 它编译的时候为什么没错? 不胜感激 |
|
6楼#
发布于:2002-06-06 17:00
TO Tomgin 兄: 嘿嘿,这样看来问题在于你的R1394_SynchCompletionRoutine声明或引用,而不在IoSetCompletionRoutine。 NTSTATUS (*PIO_COMPLETION_ROUTINE) ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ); 你查一下R1394_SynchCompletionRoutine涉及的地方是否,还有没进行“类型转化”!struct _KEVENT * ---》 void * 应该可解决! 祝好运! :) |
|
|
7楼#
发布于:2002-06-06 17:04
不好意思,我传问题是写错了 有点糊涂了。。。。。。 是R1394_SynchCompletionRoutine还是t1394Diag_SynchCompletionRoutine??? :) |
|
|
8楼#
发布于:2002-06-07 08:09
看了一下,ddk 中的代码,
的却是那样写的,你的代码也不应该出错。 这种错误,一般是 设置编译器的警告级别 时会出现这种错误。 你看看 make 文件 和 source 文件是否与 ddk 中有不同的地方。 如果,一样, 那就不好办了, 只有看看你的所有代码和工程配置, 看看是否别的错误导致出现这个错误的。 |
|
|
9楼#
发布于:2002-06-07 08:48
问题解决了.我在R1394_.....前加了依据强制类型转换(PIO_COMPLETION_ROUTINE)R1394_SynchCompletionRoutine
问题就搞定了.另:R1394_SynchCompletionRoutine时我自己写的驱动里的,不是例子 |
|