关于Windows编程中一些注意事项——程序运行时的出错,而调试却没有错
来源:互联网 发布:阿里云域名解析 chame 编辑:程序博客网 时间:2024/05/02 03:10
小伙伴们你们有木有遇到这种情况,一个程序直接运行时出错,而当你选择调试时(不管是单步调试,还是断点调试),程序就可以正确的运行。最近我就遇到了这个问题。在纠结了几天之后我终于找到了问题所在。这里写一下文章记录一下吧。
这里说明一下事情的背景,程序是这个样子的分成两端,一下就简称A、B两端了。在 A 端向 B 端发送命令,B 端截取当前屏幕存成 .jpg 图片,并发送给 A 端显示。这里截取屏幕我是通过向系统发送 “Print Screen” 按键按下的消息,将当前屏幕的截图保存到剪切板中。这里保存的格式是BITMAP。然后再通过 jpeg 压缩算法生成 .jpg 格式的图片。
下面详细说一下问题。我的 A 、B 两端是两台电脑,(我的台式机和笔记本)但是通过 Input Director 这个软件让我的两台电脑共享一套鼠标和键盘。这里你可能会疑惑我为什么会说这个?别着急我慢慢解释。关于截图的程序,我是单独测试过的没有问题。关于两端之间传文件我也是单独测试过的没有问题。当时当我把两者结合一起使用时就出问题了。那就是两台电脑测试直接运行时总是无法生成图片,所以导致发送文件时就出现了找不到文件的错误。但是当我调试运行时,每一次都可以正确的运行通过。这里我就很纳闷到底是什么错误会导致这种奇葩的问题?后来经过许久的纠结我发现问题就出现在下面这一句上面:
HGLOBAL hcilp = GetClipboardData( CF_BITMAP ); (用来从剪切板中获取数据,获得剪贴板的内存块首地址)
每次直接运行时 hcilp 总是NULL。而每次调试运行时却可以得到正确的句柄。
开始我以为是因为上面发送 “Print Screen” 按键按下的消息 的问题,因为程序执行的太快,系统没反应过来。后来我尝试着让程序睡眠等待一段时间,但是我发现即使将睡眠时间改的很大也是无法正确运行。
看到这里,可以好好想一下为什么呢?
后来我发现调试运行和直接运行的差别在哪里。前面说过我是两台电脑共用一套键鼠,所以当我直接运行时发送命令的是 A 端也就是我的笔记本,而这时我的鼠标光标是在笔记本端的,但是执行截屏命令的却是 B 端也就是我的台式机。发送 “Print Screen” 按键按下的消息 的也是台式机。但是接下来的打开剪切板 时获取的活动窗口却是我的笔记本,所以打开的是笔记本的剪切板,而此时该剪切板中却没有 CF_BITMAP 类型的数据。所以才会出现上述的问题。但是当调试运行时我却必须将鼠标光标移到台式机。
所以我想以后一定要注意类似的问题了。可能再也不会有类似的情况了。但是我还是记一下,给大家提个醒吧。
- 关于Windows编程中一些注意事项——程序运行时的出错,而调试却没有错
- 编程中经常遇到的调试没问题,运行却出错的一种原因
- Android工程项目没有错却出现红叉—解决办法
- Android工程项目没有错却出现红叉—解决办法
- eclipse下一个程序运行正确,调试却出错的原因以及解决办法。
- C++2005中调试出现问题。程序没错误,但调试时却出现无法找到调试信息
- debug 没有错,release出错
- vs2010 程序语句有错,也报错了 却运行了以前的版本,怎么设置它有错就不要运行了呢?
- java程序中没有错,但是项目上面显示一个红叉的解决办法
- java程序中没有错,但是项目上面显示一个红叉的解决办法
- java程序中没有错,但是项目上面显示一个红叉的解决办法
- 来这真的没有错
- 关于导入新项目的问题——项目文件有错,但是子文件没任何错误的解决办法
- 运行Qt程序的一些注意事项
- 在VC中Debug下是运行结果正确的,但是在Release下却有错,总算找到原因
- 请求高人帮我看下代码,编译没有错,运行出问题 关于简单文本编辑器的
- 写一个没有错的二分搜索程序
- 关于程序在vs中可以运行,而生成的exe运行不正常的问题
- SqlServer 中实现表的树形结构排序
- requestdispatcher.forward 和response的sendredirect的路径问题
- 【博客之星】坚持并专注于自己的梦想
- WSAAsyncSelect模型详解
- GlusterFS 4.0开发计划解读
- 关于Windows编程中一些注意事项——程序运行时的出错,而调试却没有错
- 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数
- ESXi5.0在HP DL380安装后存储控制器健康警告解决
- ESXi5.1查看内置存储器健康状况
- redis读写分离下的高可用设计与实现(上)
- 写一函数,将此字符串从第m个字符开始的全部字符复制成为另一个字符串。
- hi3531的时钟系统
- php事务处理机制
- 除夕不放假