笨笨的CChart系列教程早已结束。在教程发布以后,收到很多反馈意见。原来的教程可能有的地方还是交代得不是特别清楚,因此笨笨准备做一些查漏补缺的工作,再增加几课的内容。
第十九课已经介绍了CChart在VS2010下的使用,本节课进一步介绍几点CChart在高版本VC下的使用注意事项。
笨笨用的高版本VC是2010版,对于其它版本,应该是差不多的,VS2012版本已经有网友测试过了,完全一样。
A1.1 目录问题
这本来是一个小问题,不值一提,不过也有网友咨询过我。
用高版本VC建立一个解决方案后,VC将建立一个目录,例如Lesson19。但在这个Lesson19目录里面,还有一个Lesson19目录。
拷贝文件的时候,需要把CChart的头文件和库文件拷贝到内层的Lesson19目录里面,拷贝到外层的话,VC不认。
另外无论是VC6还是高版本VC,按照前面课程的说法拷贝CChart库文件后,在VC集成环境中启动程序,运行不会有什么问题,但如果进入Debug目录或者Release目录中启动程序,又会找不到Dll,这时候需要把对应的Dll文件拷贝到该目录中。
这些都是些小儿科的问题。
A1.2 VC运行时库的问题
笨笨在网上发布的CChart是用VC6编译的,如果在高版本下使用,可能会出现找不到VC6运行时库的问题。
具体地说,就是在Debug模式下,缺少Msvcp60d.dll和Msvcrtd.dll两个文件,在Release模式下,缺少Msvcp60.dll和Msvcrt.dll两个文件。
解决方法很简单,从网上下载或者到其他电脑上拷贝这几个文件就可以了。
笨笨新发布的版本已经把这几个文件放进去了,免去了各位到处搜寻的麻烦。
当然最根本的解决方法是联系笨笨,笨笨可以用你所用的VC版本重新编译一下CChart,这样就不需要这几个文件了。
A1.3 Unicode问题
笨笨最初发布的CChart版本不是Unicode的,里面的库文件共5个,头文件Chart.h,Debug模式的CChart_d.lib、CChart_d.dll,Release模式的CChart.lib和CChart.dll。
VC6默认使用的配置是多字节,也就是非Unicode的,使用笨笨发布的版本不会在这方面有什么困惑。但高版本VC默认使用的配置是Unicode的,这样只要使用了带字符串的函数,链接的时候就会出问题。
在第19课中,笨笨提出的解决办法是修改解决方案的默认配置,改成多字节,这样当然问题就解决了。
但是很多情况下,不是这么简单,有时候还真必须使用Unicode,比如使用了其它什么库,这时候怎么办呢?
当然笨笨会给大家解决问题的,新发布的CChart版本都包含了Unicode的库文件,目前库文件仍然是5个文件,但去掉了Debug模式的文件,增加了宽字节的文件,包括Debug模式下的CChartu.lib、CChartu.dll。
以前笨笨给大家推荐的包含库文件和头文件的方式如下。
#include "Chart.h"
#ifdef _DEBUG
#pragma comment(lib, "PlotDll_d.lib")
#else
#pragma comment(lib, "PlotDll.lib")
#endif
有了Unicode版本后,笨笨推荐大家把这段代码改成如下的方式。
#include "Chart.h"
#if defined(_UNICODE) || defined(UNICODE)
# pragma comment(lib,"CChartu.lib")
#else
# pragma comment(lib,"CChart.lib")
#endif
这样不管是否使用Unicode,都能正确链接到正确的库文件。
在高版本VC中,如果使用了Unicode,还需要一个设置才能编译成功。如图,在对话框中把Treat WChart_t As Build in Type设置为No。这个问题只存在于VC6编译的版本中,如果下载VS2010编译的版本,则不存在这个问题。
A1.4 Namespace问题
从4.0.0.1版本开始,CChart所有内容都放入了命名空间NsCChart之中,以避免潜在的变量与用户重名的风险。所以请大家加上下面这句话,不然会提示找不到变量名。
using namespace NsCChart;
A1.5 VS2019使用问题
在VS2019中打开一个Demo,编译,出现如下错误。
这个问题处理很简单,如图所示即可。就是把“启用函数级链接”改成“是”。
现在OK了,编译成功!
上面的Demo是由VC6生成的。VS2019有很多新特征,也有很多默认设置和VC6是不同的,这完全可以理解。
如果我们用VS2019新建一个项目,会遇到什么情况呢?
这就试一下,还是新建一个用到CChart的Windows桌面应用程序吧。编译一下,出了如下的幺蛾子!
问题就处在Chart.h中一些函数中参数默认的字符串上,如图。
解决问题的方法如图,把“符合模式”由“是”改成“否”。
好了,问题解决!
本节课暂时就说这么多,目前也没有发现什么严重的问题。这也说明CChart其实还是比较成熟了。
以后如果还有什么需要交代的,笨笨会随时更新。