当前位置: 代码迷 >> WinCE >> #define IOCTL_××× CTL_CODE( …)何解?怎么在DeviceIoControl()调用IOCTL_×××对应功能
  详细解决方案

#define IOCTL_××× CTL_CODE( …)何解?怎么在DeviceIoControl()调用IOCTL_×××对应功能

热度:250   发布时间:2016-04-28 12:55:06.0
#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_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)

// Set Diplay position 
// dwLenIn = MAKELONG(left, top)
// dwLenOut = MAKELONG(width, height)
#define IOCTL_CAM_SETPOS CTL_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
  相关解决方案