WriteFile操作时返回87错误

调用 WriteFile写数据时出错,用GetLastError得到错误代码为87(无效参数)。

代码片段如下:

  if ((!WriteFile(
        m_hDevEx,
        pBuf,
        size,
        &WriteBytes,
        &Overlapped)) &&
        (GetLastError() != ERROR_IO_PENDING))
    {
        OutputDebugString("Write error\n");
        return false;

    }

问题出在最后一个参数Overlapped,初始化是这样的:

    OVERLAPPED Overlapped;
    Overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

这种初始化在ReadFile时时没有问题的,而WriteFile时需要将该结构体中的Offset,OffsetHigh两个参数设置成零,即:

    OVERLAPPED    Overlapped;
    Overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
    Overlapped.Offset = 0;
    Overlapped.OffsetHigh = 0;
 

以上这样初始化之后,错误消失!

WriteFile操作时返回87错误

时间: 2024-10-09 04:34:01

WriteFile操作时返回87错误的相关文章

Vue 页面15分钟无操作时返回首页

这种需求手机端和pc端一般是不存在的,因为都是可以手动操作刷新的. 最近在做一个户外社区大屏的项目,因为大屏是全屏显示,没法手动刷新,不可能在页面专门做一个刷新按钮,也不好看,那这样的需求就显得格外重要了. 首先我们来分析一下需求: 1.15分钟--需要定时器 2.无操作--监控页面上的点击.触摸.滑动等事件 3.返回首页--切换路由 我们只需要设置一个定时器,在一进入页面的时候就开始计时,如果15分钟内有点击.触摸.滑动等操作时就重新计时,时间一到就切换路由. 而且我们还需要新建一个空白组件r

MyBatis在insert插入操作时返回主键ID的配置

转:http://www.cnblogs.com/icerainsoft/p/4648900.html 很多时候,在向数据库插入数据时,需要保留插入数据的id,以便进行后续的update操作或者将id存入其他表作为外键. 但是,在默认情况下,insert操作返回的是一个int值,并且不是表示主键id,而是表示当前SQL语句影响的行数... 接下来,我们看看MyBatis如何在使用MySQL和Oracle做insert插入操作时将返回的id绑定到对象中. MySQL用法: <insert id=&qu

Mybatis在insert操作时返回主键

今天在写项目的时候,遇到一个需求,就是在像数据库插入数据的时候,要保留插入数据的主键,以便后续进行级联时,可以将该主键作为另张表的外键. 但是在正常情况下我们使用插入语句返回的是int型,含义是影响该表数据的条数.但是这时候我们想要的得到的却是主键,这时候就可以对mybatis文件进行配置 如图: 属性详解: parameterType ,入参的全限定类名或类型别名 useGeneratedKeys ,取值范围true|false(默认值), 设置是否使用JDBC的getGenereatedKe

sql server 2008 r2 数据库操作时提示 9002错误“事物日志已满”问题

事务日志截断 若要避免数据库的事务日志被填满,例行备份至关重要.在简单恢复模式下,备份了数据库后会自动截断日志,而在完整恢复模式下,只有备份了事务日志后方才截断日志.但是,截断过程有时也可能发生延迟.有关识别和应对各种延迟因素的信息,请参阅可能延迟日志截断的因素. 注意  BACKUP LOG WITH NO_LOG 和 WITH TRUNCATE_ONLY 选项已废止.使用完整恢复模式或大容量日志恢复模式时,如果必须删除数据库中的日志备份链,请切换至简单恢复模式.有关详细信息,请参阅有关从完整

AE开发中,对 COM 组件的调用返回了错误 HRESULT E_FAIL,在地理处理中,即GP工具处理时出错

ArcgisEngine二次开发中,进行地理处理,即:相交操作,交集取反操作,擦除操作等过程中,如果权限分配不当,就会出现上面对 COM 组件的调用返回了错误 HRESULT E_FAIL 的错误 原因如下:在进行擦除,交集取反等高级操作时,必须是ArcgisInfo级别的许可授权,否则无法进行操作,而相交操作用ArcgisEngine级别即可.(不稳定,会出错,建议2) 解决如下:1.如何使用licenceControl控件选择ArcgisInfo选项即可,同时选中其中的Spatial Ana

在服务器上处理请求时出现未知错误。服务器返回的状态码为500

操作方法: 为页面的ScriptManager控件添加EnablePartialRendering="false"的属性  此方法不是直接解决或规避问题的,是为了将详细的页面错误显示出来,以便找到需要修正 的地方,个人觉得这才是正道嘛,不能躲避错误,而应尽量不让错误发生. ---> 找出错误  -- > 修改. <asp:ScriptManager ID="ScriptManager" runat="server" Enable

mysql执行大量的操作时,报无法连接数据库的错误

问题:mysql执行大量的插叙操作时,报无法连接数据库的错误,错误详情如下: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1' (99)' in /mnt/Change/www/html/data/conn.php:5 Stack trace: #0 /mnt/Change/www/html

JAVA调用mysql数据操作时出现错误:impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENT.&#39;

使用mysql做持久化报错:Cannot execute statement: impossible to write to binary log since BINLOG_FORM ActiveMQ中如果使用mysql innodb的同时,开启了binlog,那么在ack消息的时候,日志里就可会报错:java.sql.SQLException: Cannot execute statement: binlogging impossible since BINLOG_FORMAT = STATE

如何找回执行页内操作时的错误机械硬盘的文件

执行页内操作时的错误说明这个盘的文件系统结构损坏了.在平时如果数据不重要,那么可以直接格式化就能用了.但是有的时候里面的数据很重要,那么就必须先恢复出数据再格式化.具体恢复方法可以看正文了解(不格式化的恢复方法) 工具/软件:AuroraDataRecovery 步骤1:先下载并解压软件运行后,直接双击需要恢复的分区,然后右击软件图标选择<以管理员身份运行> 步骤2:程序运行后,直接双击需要恢复数据的盘 步骤3:软件找出文件后,会放到与要恢复盘同名的目录中 步骤4:将需要恢复的资料勾选,然后点