哥早已不在程序的世界,然而却一直流传着哥的传说。最近闲来无聊,写了个小工具,在这之间,真的是酸甜苦辣咸,举步维艰啊!这篇小文准备将遇到的一些小问题列举一下,对于程序世界的大神来说,直接绕路就好了,仅供小白参考。
在正式闲话之前,小伙伴们来看看我这题字如何啊,是不是感觉很给力啊!
闲话不多说,直接入主题。首先来展示下这个小工具的界面,有点小丑,没有加美化效果,凑活着看吧,哈哈!
首先来普及下一些概念知识,帮助路过的小白扫扫盲,嘿嘿!
/1/
本次采用的技术是MFC技术,先来看看MFC的定义吧!
MFC:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
可能路过的小伙伴要说了,雁兄,你这段文字好眼熟啊,不会是哪边copy来的吧。我可以很负责任的告诉你,这段文字绝对是copy来的,而且还是从很屌的网站copy来的,百度,哈哈哈!概念性的东西就这么过了啊,不要太在意细节!
/2/
另外本工具还涉及到一款软件UG。
UG:UG(Unigraphics NX)是Siemens PLM Software公司出品的一个产品工程解决方案,它为用户的产品设计及加工过程提供了数字化造型和验证手段。Unigraphics NX针对用户的虚拟产品设计和工艺设计的需求,提供了经过实践验证的解决方案。UG同时也是用户指南(user guide)和普遍语法(Universal Grammar)的缩写。这是一个交互式CAD/CAM(计算机辅助设计与计算机辅助制造)系统,它功能强大,可以轻松实现各种复杂实体及造型的建构。它在诞生之初主要基于工作站,但随着PC硬件的发展和个人用户的迅速增长,在PC上的应用取得了迅猛的增长,已经成为模具行业三维设计的一个主流应用。
简单点说呐,这就是一款三维建模软件,和那些proe、maya、SolidWorks啊,类型是一样的。主要就扫盲这两个概念了,至于涉及到的其它软件,就不赘述了。
/3/
具体问题如下,都是些小白问题,给像我一样的小白参看一二,减少点弯路,哈哈!
No1.
在向Access数据库插入数据时,报出如下错误。
解决方案:
插入的值上面没有使用单引号,如:
insert into partInfo (name,year) values (frank,26)
正确的表达方式是:
insert into partInfo (name,year) values (‘frank’,26)
No2.
在向Access数据库中插入数据时,报出如下错误:
解决方案:
需要安装数据库引擎软件“Microsoft Access 2010 Runtime”,
我这边使用的visual studio是2013版本,本以为要装一个对应的2013版本,经过试验证明,2013版本是不行的,所以只能装一个2010的,且需要32位的,64位的试验不成功。
No3.
VS编译文件分为64位和32位之分,我的这个程序需要调用一些外部依赖的dll文件,dll文件也是有64位和32位之分,这一点一定要注意,我就是因为这种乌龙,折腾了好久。
千万别笑我,这个纯属小白错误,毕竟离开江湖太久了,法力有点减弱,哈哈!
No4.
基于UG开发的程序,是需要通过UG的环境变量来调用程序的,所以直接运行这样的程序,是会报出一些错误的,如:
找不到相关的dll文件,此时有两种解决方法:
(1)设置一个脚本文件,在脚本中设置好环境变量,然后调用这个程序。
(2)直接在操作系统环境变量path里面加上环境变量,如
No5.
MFC的使用
MFC的使用默认有三个选项:
(1)使用标准Windows库
(2)在静态库中使用MFC
(3)在共享库中使用MFC
使用标准Windows库:
顾名思义,这一种当然是直接调用标准的windows库。
在静态库中使用:
程序在打包时,会将一些MFC的DLL文件包含在exe中,所以文件相对比较大。大一点没关系,当你把这个exe文件拷贝到其他机器上使用时,即便他的电脑上没有这些DLL文件,也是木有关系的,因为你已经把它包进了exe文件,直接运行时没有问题的。(注意:只有MFC的DLL文件被打包进去,涉及到外部引用的DLL文件是没有被打包的,比如我这里说到的NX软件的DLL文件。
在共享库中使用MFC
程序在打包时,没有将一些DLL文件打包到exe文件中,相对来说,此时的exe文件比较小。但是相对于第二种方式,有一个缺点就是,该exe文件在其他电脑上运行时,若该电脑上没有对应的dll文件,则程序运行会报错,这样的话,就给客户使用带来很大的不利,影响用户体验。
个人小建议:
如果你的程序需要经常更新,DLL文件的更新频率比较高,建议是使用“在共享库中使用MFC”,每次给客户更新下DLL文件以及相关程序文件即可。
如果是像我这样只是做个小工具使用,最好是使用“在静态库中使用MFC”,这样比较方便,不然每次都给你来个什么小错误,这该是多么痛的领悟。
动态链接到MFC的规则DLL应用程序里头的输出函数可以被任意Win32程序使用,包括使用MFC的应用程序。但是,所有从DLL输出的函数应该以如下语句开始:AFX_MANAGE_STATE(AfxGetStaticModuleState()),此语句用来正确地切换MFC模块状态。
在windows操作系统中,在程序中调用资源时需要指定instance handle,对于exe中的代码,
一般是0x400000,但dll中就不是了,所以若需调用dll中的资源,则需用GetModuleHandle,但这样就无法让MFC自动来处理很多事情,所以AFX_MANAGE_STATE(AfxGetStaticModuleState()),的意思就是把当前dll的相关参数存入MFC的“AfxManger”,当MFC的哪个接口需要相关dll的参数时,就可以从“AfxManager”中直接提取,所谓的“模块切换”也就是dll参数的切换。
No6.
MFC编译字符集错误。
在VS中字符集默认有两种:“使用Unicode字符集”和“使用多字节字符集”
此次我这边使用的是“使用多字节字符集”,这个字符问题真的是折腾了我好久,之前老是报错,很多时候编译通过了,界面上输出的字符串还是乱码,然后切换了这个字符集就好了。
其中一个错误(使用Unicode时)如下图:
No7.
UG64位程序和32位程序如果不对应的话,就会报出如下错误:
位数对应好久OK了!
码文字绝对是一项既耗体力,又伤神的活,赶紧去补充点能量,然后继续下一篇,M文(@M文-苏州-财务)给我的卡哇伊图片还得上封面,今晚必须得搞定,今日事今日毕!!!
END.