#define IOCTL_××× CTL_CODE( ……)何解?如何在DeviceIoControl()调用IOCTL_×××对应功能?
wince5.0下ov9650部分摄像头驱动代码如下:
// show Camera
//dwLenIn = 1 : Normal overlay
//dwLenIn = 4 : Alphablending
//dwLenIn = 5 : Colorkey overlay
#define IOCTL_CAM_SHOWCTL_CODE( FILE_DEVICE_VIDEO, 1, METHOD_NEITHER,FILE_ANY_ACCESS)
// hide Camera
#define IOCTL_CAM_HIDECTL_CODE( FILE_DEVICE_VIDEO, 2, METHOD_NEITHER,FILE_ANY_ACCESS)
// Set Diplay position
//dwLenIn = MAKELONG(left, top)
//dwLenOut = MAKELONG(width, height)
#define IOCTL_CAM_SETPOSCTL_CODE( FILE_DEVICE_VIDEO, 3, METHOD_NEITHER,FILE_ANY_ACCESS)
如果要在应用程序中通过DeviceIoControl()调用IOCTL_CAM_SHOW对应的功能函数,要在应用程序代码的头文件里怎么define呢?
[解决办法]
其实没那么复杂,
你自己定义一个 IOCTL_CAM_SHOW 就可以。
在驱动里面
#define IOCTL_CAM_SHOW 1
然后在 IOCONTROL 里面处理
CODE 为 IOCTL_CAM_SHOW 的函数。
然后在应用里面一样
#define IOCTL_CAM_SHOW 1
DeviceIoControl()调用IOCTL_CAM_SHOW
就可以了~!
[解决办法]
都是宏而已。作为DeviceIoControl的参数传进去的。
调用驱动一般都是CreateFile,得到handle,然后去调用DeviceIoControl。
[解决办法]
DeviceIoControl的参数,就是一个代号
[解决办法]
你不用管他是什么
你也在应用中用驱动的
#define IOCTL_CAM_SHOW CTL_CODE( FILE_DEVICE_VIDEO, 1, METHOD_NEITHER,FILE_ANY_ACCESS)
// hide Camera
#define IOCTL_CAM_HIDE CTL_CODE( FILE_DEVICE_VIDEO, 2, METHOD_NEITHER,FILE_ANY_ACCESS)
就能用的了,这是微软弄的一个宏,他表面上方便管理设备的一些控制字,如果我们重新写,我也不愿意这么写,麻烦。
[解决办法]
請加上
#include <winioctl.h>
Paul, Chao @ Techware