程序封装_随记(2)

第一次封装GMM函数,很快,好像不到一周吧,对,是前期查资料的时候用的时间长,我差不多把大家自己的写的GMM代码全部看了一遍,才对GMM的流程有些大概的了解;然后看GMM的经典文章,对其参数有些大概的概念。然后开始动手写代码,封装函数,由于有HiIVE的库,时间用的真的不多。

封装完了,临了发个老大时,被拒了。我应该写Release版本Release,不是新名词,以前听过,但是没有做过,其实内心还是有些害怕的。想起大哥和笨蛋和我说的话,想做就大胆的做,最差就是被fire嘛!然后就查资料,然后就试着做,还不错,vs很强大,我只需要动动手指头(项目->配置管理器),然后一大堆问题,编译错误是小事,至少你知道是怎么错误,现在是链接错误,对链接没有概念的孩子来说,真是件难事,干吧,孩子!常见的链接错误:

LNK2001这个是函数使用错误,或是没有找到函数库,这时候,你应该看看自己有没有引用错库函数,或者有没有指定库函数的路径,相应的dll文件有没有拷贝到当前目录下;

LNK2005这个就是库引用的问题,可能是库函数冲突,需要到链接的输入里边屏蔽到一些库(根据提示来);

堆释放错误:这个通常是由于程序结构所致,永远记住:申请几个内存,就释放几个内存,在哪儿申请,就在哪儿释放;对于在exe申请的内存,想要在dll中释放,然后你还一直找问题,最后你老大帮你找到后,估计抽你的心都有了!(哈哈,我是自己找到的,没敢麻烦他)。

代码要规范:申请-释放,创建-销毁,等等要配套使用,别到时候忘了,你还傻傻的高兴!

Release问题:当你选择Release时,程序会进行简单的代码优化等,当然vs编译时调用的函数库也是不同的。当EXE使用Release版本时,你的DLL最好也是配套的。

MSVCP100D.dll丢失问题:这个问题不是很常见,看了好久也没有明白,现在只是有一丁点概念,这个是.netframe的一个函数库,属于系统库,应该是window提供出来供程序猿使用的吧,(纯属个人理解,因为有人的电脑没有这个函数,而这个函数又是存在于win/system32中,当然VS的安装目录下也会有一份)。网上说的都是在代码生成的时候选择MT(或MTD),而不是MD(或MDD),前者属于多线程静态库,程序会最大程序的进行封装(有点类似于lib),后者是多线程dll(有点像dll吧)。因此在生成dll的时候选择MT就对啦!当然有时候需要屏蔽掉LIBCMT.lib库。

关于dll的问题,可以通过设置环境变量来查找路径,但是对于个人的小程序,尤其是自己写的小dll就算了吧哈!

最后在说一下封装的含义:为什么要封装,封装就是要大程度的减小对库的依赖。对于我目前来说,就是只可以依赖HiIVE库,最好不要依赖opencv库,所以头文件等什么的,都需要自己重新定义,然后在源文件中和HiIVE的库进行转化。个人经验:如果结构的类型都一致的话,可以直接强制转化,不会有什么问题。还有在说说结构体,结构在使用之前一定要进行申请内存,要不没法用。对于结构里的指针,在哪儿申请就在哪儿释放。

在补充一点,学会使用VS管理程序,真的很重要!目前只知道:自动复制文件,全局设置和局部设置。

今天,老大又帮我看代码了,问题:

1.只要灰度图像实现GMM算法就可以,不要依赖opencv库,就是不要它,踢掉它!O(_)O哈哈~

2.学习写错误代码:我先跑会题,dll的好处,在别人的电脑出现问题后,我们only重现生成exe,然后copy过去,试着跑跑;对于软件升级,我们just给他们一个新的dll,然后自己去跑跑吧,和我们没关系了,dll很强大吧,不需要重新编译等麻烦事儿!回正题:有了错误代码,我们只需要查找错误代码,就知道程序哪儿出错!要不累死你,重新开始调试,尤其是调试别人写的代码,在加点错误的单词,哈哈,生活还是美好的!

错误代码的写法:扔一个全局变量,在加一些错误枚举类型,在给一个全局函数,程序猿自己玩去吧!他们自己去调用函数,查看错误代码,然后自己去找问题,然后自己去解决!Just by themselves,but now by myself!

3.下一步,识别目标物。先看看文献吧,其实我都不怎么懂!

最后说说和老大交流最深的感触:

1.思维方式:直奔主题,说说我们的对话吧,A:生成结果会出现一些规律性的斜划线;B:这个一定是你自己程序的问题;A:我重新写了一个小demo,调用我自己的dll,还是有错,我怀疑是HiIVE的问题;B:哦,或许吧!(思索着~~~~B:是前景图像,还是背景图像;A:全部都有;B:这个图像,我们不需要提供给用户,只用它做分析,应该不会有影响。(茅塞顿开O(_)O哈哈~)原来领导都这么思考问题的!

2.出现问题解决问题:还是我们的对话,Aexe程序在别人的电脑上跑,总是提示缺少MSVCP100d.dllB:你采用静态链接。A:对。B:我帮你看看!(调试中~~~~米有结果,吃饭去了!下午我苦逼的自己去调试,晚上突然有结果了)A:现在程序封装好了,可以运行了,在我的共享!B:缺少的那个dll呢,怎么解决的?A:(其实我也不太懂,只是忽略了一个库LIBCMT.lib)各种绕B:你懂么?A:不太懂!B:那我帮你看看!(木有结果)B:重新编辑一个工程,把那个问题搞明白,下次同样的问题,你才有头绪!A(找呀找呀找问题,就是没有原来的情况!该翻篇了吧!)

最后嘱咐一点,最好不要去改什么注册表。(实在要改,一定要备份;要有自己的思考,网上的方法不一定有效,要学会思考)哈哈

PS:我这本想写自己的问题的,结果写成了日记,就这样吧,估计要找答案的人,看到这样的博客,得疯了!O(_)O哈哈~

不写了,我得看看共享是怎么做到的!贯通,才不会出问题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值