有关VC++编程的一些经验

原创 2006年06月22日 11:29:00

编号: 001
时间: 2005-5-19 14:16
说明: 有关不同类型之间的地址运算
部分源代码如下:
typedef struct
{
 BYTE flag;    //0表示始发,1表示反馈
 BYTE content;    //命令内容 
 BYTE hostNum;    //发送方序号
 unsigned short segNum;   //包序号,用于文本发送时
 unsigned short id;   //整个程序中一个包的标识
 unsigned short data_size_extra;  //包后的数据大小
}PACK_CMD;

PACK_CMD * pCmd;

int nOne = (char*)pCmd + 10;
int nTwo = (char*)(pCmd + 10);

问题:nOne是否与nTwo相等?
解答:不会相等.前者在pCmd地址的基础上加上了10字符长度;而后者是加了10个PACK_CMD长度,也就是
     sizeof(PACK_CMD)的长度.
    
编号: 002
时间: 2005-5-19 14:24
说明: 有关VC编译器字节对齐选项对sizeof()函数的影响

问题: 在001中的sizeof(PACK_CMD)会等于9?
解答: 不一定.这跟VC编译器字节对齐选项有很大关系.如果按单字节对齐,其值为等于9;但当按8字节对齐
      时sizeof(PACK_CMD)便等于10了.

编号: 003
时间: 2005-5-24 17:45
说明: 有关串口通信

部分伪代码如下:

void SendComCmd(PACK_CMD cmd)  //把cmd发送给串口控制机
{
 //sending com command
}

void SomeOneBuuton_Click()
{
 PACK_CMD cmd1,cmd2;
 SendComCmd(cmd1);  //某个控制命令
 SendComCmd(cmd2);  //另外一个控制命令
}

问题: 在函数SomeOneBuuton_Click中通信会正常吗?
解答: 在大多数情况都不会正常.目的机(主控机)极有可能收到cmd1还未来得及处理时cmd2命令已经发送过来.
      此时在目的机方看到的情况似乎就是cmd1未收到.因此要在他们之间加上一个延时,延时的时间比所发送
      数据的大小( 0.1毫秒/位 ) 略大一点即可.
      如在此PACK_CMD为10个字节,那么取10毫秒已经足够.

如下的代码便能工作正常:
void SomeOneBuuton_Click()
{
 PACK_CMD cmd1,cmd2;
 SendComCmd(cmd1);  //某个控制命令
 
 Sleep(10);   //延时10个毫秒 
 
 SendComCmd(cmd2);  //另外一个控制命令
}

编号: 004
时间: 2005-5-27 9:07
说明: 有关调试程序

 之前已经把录音程序调试成功,并且经网络发送成功.之后为了可靠,用了轮询机制.下位机每一段时间如10秒
发送一个在线命令过来,上位机会将这个下位机的ID放入一个队列中,上位机每30秒检查这个队列中有无某这个下位机
的ID,有则在线,无则不在线;这时却发现一个录音录的是噪音.为什么?
 1,有可能是录音本身有问题?
 2,录音没问题有可能发送有问题?
 3,学生录音,发送没问题而是上位机接受有问题?写了不应该写的数据?
 4,上位机接的也完全是正确的数据,但发送有问题?
 5,上位机发送的没问题,而是学生机收的数据有问题?
 6,学生机接收的录音数据没问题,可能是因为用播放MP3的设置在播放录音文件?
 按理说应该是这样一个流程,一步步检查下来.这些步骤都没有问题,问题到底出在那里呢?
最后想到上面所说下位机每10秒中发送一个在线命令到上位机.再一想,下位机同时仅能往同一个端口发送数据,在录
录音的时候下位机有没有发送在线命令,发向的是那个端口,于是乎怀疑是下位机把在线命令也发送到上位机录音接收
端口以致噪音.
 之前,我一直在怀疑是上位机的问题,因为在此个过程我将接收和发送录音的数据AX文件重新编译过是不是这
原因致使发送或接收都出现了问题.但一想又不可能,以前在深圳试过都曾试过也没问题.为什么会没问题呢?或许只能
归结于运气很好.比如学生机发送在线命令的时间间隔很长,那么这个时间间隔内,也没有在线命令发送过来,而录音在
在这个时间间隔内停止,然后播放当然没会出现什么问题!因为没有任何的其它不合法的数据进入录音接收端口.
 
 因此我想,当出现类似这样的问题的时候应该多想想现在双方各做了些什么事情,特别是比以前正常工作时多做
了些什么事情!如果仔细想想这个思路,那么这个问题也就不至于查很长时间.


编号: 005
时间: 2005-7-14 11:15
说明: 有关(VC++)调试环境的建立

 今天从网上下载了一些源代码,都是现成的工程!想进行一下单步调试,看看程序是怎么运行的.但总会弹出一个
对话说什么,你所设置的断点无效或者说断点被取消.点击"project"-->"Project Setting"-->"Debug"选项会看到调试
程序为Release版本下的执行文件.我一想可能是由于这个问题,于是想把工作的文件改到Debug文件夹下,而且把产生调
试信息的环境打勾还是不行.反复几次突然发现了"Setting For"选项为release版本,于是改其为debug版本.再试,还是
不能调试.然后我想到了是不是由于下载下来的文件是只读,就是在VC++环境中改了也没什么用.好,就把整个工程所在
的文件夹设置成"文档"属性,可结果还是一样!这就纳闷了,为什么呢?
 再一想,以后有时候出现一些有关环境的问题,都是将那几个配置文件给删除(反正删除再编译的时候也会再生
出来:))不就什么可能解决大多数问题!好就把这些文件(包括*.ncb,*.plg,release文件夹)删除掉,结果就可以调试了.

编号: 006
时间: 2005-7-26 17:30
说明: 有关(VC++)编译环境
 今天需要把同事的程序整理一下,但发现装载到VC++中的时候速度好慢,好半天才把工程打开.根据经验判断有
可能工程的几个配置文件(ncb,opt,aps,clw等)出现问题.于将这个四个文件统统删除掉才试结果还是一样.之后的几次
打开过程跟第一次打开的情况相比,不仅没有大的好转而还经常出现VC++的异常崩溃.于是怀疑是否是自己的VC++环境出
现问题.恢复操作系统,VC++应该没有问题!
 再次试验,还是与之前的情况差不多.
 在仔细观察工程的所有文件的时候发现,有两个资源文件.就想是不是资源文件出现了.并把第二个资源文件打开
打开,内容很少,文件大小也仅1K.或许没有问题!试着把第二个资源文件拿掉看看结果,也没有好的变化.
        当去看第一个RC文件时,很吃惊地的发现RC文件竟然有26M之大.据经验判断,不可能,再大的一个项目有26M的资源
文件似乎很难.再用UltraEdit32进一步打开观察具体内容,发现其中有一个对话框中的MsFlexGrid控件有很大的异样,其中
估计是描述表格的数据出现了大量的"0x000000"等数据.而且这样的数据有25M之多,于是就想当然(感觉)这些数据应该没
有用,而且就是这些数据导致了工程装载速度慢的原因.于将"0x00000"之前的数据COPY下来放一以一个文件中,然后把结尾
部分的有效数据也COPY下来放到这个文件中,以RC后缀命名并替换.再装载应该工程,惊喜出现了:
 能够很快编译工程,并且没有错误!很开心!接受试着使用一下,但发现其中有一个表格发现严重错误立马死去!于是
在工作区去找这个对话框看,发现这个对话框上的表格呈蓝色,并不能显示表格的相关属性.于是决定干脆将这个表格立即删
去!再重新放上一个表格上去,同样的名字,相关的属性也与之前的相同的,再重新编译工程,使用一切正常.

 总结: 碰到类似问题要仔细观察工程的每个文件以决定究竟是哪一部分出现了问题.然后现想办法.对于以上的这个
问题,还有一方法,是直接删除相关对话框上的表格,估计也能解决问题.

程序员如何积累编程技术或编程经验?

工作中总是被问到程序员如何积累编程技术或编程经验?首先我认为编程是一门实践性的很强的艺术,所以貌似唯有实践才能积累。然而把它当作一个个人软件过程(PSP)的问题,总感觉是有一些规律、规则或建议可以解答...
  • liulihuo_gyh
  • liulihuo_gyh
  • 2015年11月08日 20:25
  • 603

写给已有编程经验的 Python 初学者的总结

当我开始学习Python的时候,有些事我希望我一早就知道。我花费了很多时间才学会这些东西。我想要把这些重点都编纂到一篇文章当中。这篇文章的目标读者,是刚刚开始学习Python语言的有经验的程序员,想要...
  • werm520
  • werm520
  • 2014年11月03日 15:31
  • 1941

VC++串口通信编程详解

在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。串口通信方便易行,应用广泛。 一般情况下,工控机和各智能仪表通过RS485总线进行通信。RS485的通信方式是半...
  • L_Andy
  • L_Andy
  • 2016年04月12日 10:47
  • 10690

vc++多线程编程

1.CWinApp是一个i额用户界面线程对象,派生自CWinThread,处理用户产生的事件和消息。 MFC 2.AfxBeginThread函数创建和初始化CWinThread对象,启动并返回地址...
  • h1023417614
  • h1023417614
  • 2015年03月02日 19:36
  • 1839

【VC++游戏开发#五】2D篇 —— 游戏之二:看看你能坚持多少秒

前段时间在网上看见了一个小游戏——看看你能坚持多少秒——考你的敏捷性,我玩了几次,然后居然超过了18秒 事后,我用MFC模拟了该游戏中方块"撞墙反弹"的效果——撞墙反弹效果 今天呢,我就继续借用上次模...
  • crocodile_
  • crocodile_
  • 2013年11月09日 17:35
  • 6173

1年经验与10年经验一样的代码!程序员该如何回归简单?

一个1年编程经验、一个2年编程经验、一个3年编程经验、一个5年编程经验和一个10年编程经验的不同写法。这些写法中,让人啼笑皆非的是5年工作经验的程序员编写的代码看起来如此的复杂...
  • zzzdiya
  • zzzdiya
  • 2017年05月24日 14:39
  • 214

一位IT牛人的十年经验之谈

1、分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”   其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要:“...
  • u014234850
  • u014234850
  • 2015年01月23日 23:10
  • 546

VC++ 常用编程技巧总结

VC++6.0的使用以及编程技巧整理 1、MDI子窗口一启动就最大化      BOOL   CChildFrame::PreCreateWindow(CREATESTRUCT&   cs...
  • bcbobo21cn
  • bcbobo21cn
  • 2017年04月01日 22:28
  • 7472

高效自学编程的经验一

经过大概三个月的每日每夜的学习,我现在对ssh有了一定的认识,但是还离熟练掌握相差甚远。 我自己的弊病: 1,容易被某些不是主要的问题也不是很关系理解的东西吸引注意,从而忽略了主要问题,这样就造成...
  • freeideas
  • freeideas
  • 2015年02月27日 17:18
  • 412

VC++ socket编程实例

1.        两天计算机通信需要协议,通信的两台计算机IP必须唯一 2.        同一个计算机可以进行多个应用程序与其他计算机通信,IP地址唯一,而端口号是区别同一计算机(同一IP)...
  • u012252959
  • u012252959
  • 2015年08月25日 10:21
  • 2631
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:有关VC++编程的一些经验
举报原因:
原因补充:

(最多只允许输入30个字)