介绍 FT_W32_CreateFile函数的用法、参数、返回值、注意事项、适用的操作系统环境、调用代码示例等。
支持的操作系统
Linux
Mac OS X 10.4 以上版本
Windows 2000 以上版本
Windows CE 4.2 以上版本
概述
FT_W32_CreateFile 函数打开指定设备,返回对应的设备句柄。设备可以通过序列号、设备描述符、设备地址来指定。
异步IO时,需要调用 FT_W32_CreateFile 函数。
定义
FT_HANDLE FT_W32_CreateFile (PVOID pvArg1, DWORD dwAccess, DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD dwCreate, DWORD dwAttrsAndFlags,HANDLE hTemplate)
参数说明
参数 pvArg1 含义依赖于参数 dwAttrsAndFlags 的取值;如设备描述符、序列号、设备地址。这些值可以通过调用 FT_CreateDeviceInfoList、FT_GetDeviceInfoDetail 或者 FT_ListDevices 函数来获取。
dwAccess— 对设备的访问方式,可取值包括:GENERIC_READ、GENERIC_WRITE 或者 GENERIC_READ|GENERIC_WRITE.。在 Linux 平台下此参数忽略。
dwShareMode— 设备共享方式。固定取值0。
lpSecurityAttributes— 保留。设置为NULL。
dwCreate— 保留。设置为NULL。
lpSecurityAttributes— 必须设置为 OPEN_EXISTING,在 Linux 平台下忽略。
dwAttrsAndFlags— 文件属性和标志。当进行异步IO时,该参数是一个组合体,由FILE_ATTRIBUTE_NORMAL, FILE_FLAG_OVERLAPPED 组合;如果使用设备序列号,则 dwAttrsAndFlags 取值为 FT_OPEN_BY_SERIAL_NUMBER;如果使用设备描述符,则dwAttrsAndFlags 取值为 FT_OPEN_BY_DESCRIPTION。
hTemplate—固定为NULL。
返回值
成功则返回设备句柄;如果失败则返回 Win32 错误码 INVALID_HANDLE_VALUE。
备注
参数 pvArg1 的值取决于参数 dwAttrsAndFlags:
如果参数 dwAttrsAndFlags 设置为 FT_OPEN_BY_SERIAL_NUMBER 或者 FT_OPEN_BY_DESCRIPTION,参数 pvArg1 为包含终止字符的字符串,其中存储设备的序列号或者描述符;
如果参数 dwAttrsAndFlags 设置为 FT_OPEN_BY_LOCATION ,参数 pvArg1 为long类型变量,存储设备的地址编号。
参数 dwAccess 可取值为 GENERIC_READ,、GENERIC_WRITE 或者 GENERIC_READ|GENERIC_WRITE;
参数 dwShareMode 固定为0;
参数 lpSecurityAttributes 固定取值为 NULL;
参数 dwCreate 必须设置为 OPEN_EXISTING;
参数 dwAttrsAndFlags 异步IO时,取值为 FILE_ATTRIBUTE_NORMAL, FILE_FLAG_OVERLAPPED 的组合;根据需求,可以设置为FT_OPEN_BY_SERIAL_NUMBER or FT_OPEN_BY_DESCRIPTION or FT_OPEN_BY_LOCATION;
hTemplate 必须为NULL。
注意,在 Linux, Mac OS X 和 Windows CE 平台下不支持异步IO和设备地址。
代码示例
The examples that follow use these variables.
FT_STATUS ftStatus;
FT_HANDLE ftHandle;
char Buf[64];
1. Open a device for overlapped I/O using its serial number
ftStatus = FT_ListDevices(0,Buf,FT_LIST_BY_INDEX|FT_OPEN_BY_SERIAL_NUMBER);
ftHandle = FT_W32_CreateFile(Buf,GENERIC_READ|GENERIC_WRITE,0,0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED |
FT_OPEN_BY_SERIAL_NUMBER,
0);
if (ftHandle == INVALID_HANDLE_VALUE)
; // FT_W32_CreateDevice failed
2. Open a device for non-overlapped I/O using its description
ftStatus = FT_ListDevices(0,Buf,FT_LIST_BY_INDEX|FT_OPEN_BY_DESCRIPTION);
ftHandle = FT_W32_CreateFile(Buf,GENERIC_READ|GENERIC_WRITE,0,0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FT_OPEN_BY_DESCRIPTION,
0);
if (ftHandle == INVALID_HANDLE_VALUE)
; // FT_W32_CreateDevice failed
3. Open a device for non-overlapped I/O using its location
long locID;
ftStatus = FT_ListDevices(0,&locID,FT_LIST_BY_INDEX|FT_OPEN_BY_LOCATION);
ftHandle = FT_W32_CreateFile((PVOID) locID,GENERIC_READ|GENERIC_WRITE,0,0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FT_OPEN_BY_LOCATION,
0);
if (ftHandle == INVALID_HANDLE_VALUE); // FT_W32_CreateDevice failed
暂无评论内容