posts - 27,  comments - 68,  trackbacks - 0

最近打算使用Google CTemplate作为模板引擎,但是运行其主页上的例子居然出现了错误。程序运行的结果正常,但是在退出时导致了_CrtIsValidHeapPointer异常,主要是释放string变量时出现了错误。搜索了一下Google CTemplate的讨论组,说如果编译库文件所使用的CRT版本和编译程序所使用的CRT版本不一致会导致这个问题。DLL库采用的CRT是多线程DLL方式的,所以应用程序也必须使用这个方式,这就需要在应用程序的工程选项中将CRT由默认的单线程方式改为多线程DLL方式。如下图所示。

 

不过这有时不太方便,也可以把CTemplate所需要的文件直接加到工程中,好在文件不多:

  • src\base\arena.cc
  • src\htmlparser\htmlparser.cc
  • src\htmlparser\jsparser.cc
  • src\windows\port.cc
  • src\htmlparser\statemachine.cc
  • src\template.cc
  • src\template_dictionary.cc
  • src\template_from_string.cc
  • src\template_modifiers.cc
  • src\template_namelist.cc
  • src\template_pathops.cc

记得在这些文件的编译属性中选择“不使用预编译头”,否则会出现编译错误。

2008年8月31日:以上介绍的是0.90版本,在0.91版本中src\template_from_string.cc 文件不存在了。
2008年9月15日:采用上面介绍的方法有个缺陷,就是会出现很多编译和链接的警告C4251和LNK4049、LNK4071。这主要是因为在CTemplate的代码中,定义了:

 


#ifndef CTEMPLATE_DLL_DECL
# define CTEMPLATE_DLL_DECL  __declspec(dllimport)
#endif

所以需要在编译的命令行加上“/D CTEMPLATE_DLL_DECL=”。

posted on 2008-08-30 12:41 zealsoft 阅读(1674) 评论(2)  编辑 收藏 引用 所属分类: 错误处理

FeedBack:
# re: 运行Google CTemplate首页的例子遇到_CrtIsValidHeapPointer异常
2008-08-31 01:12 | 橙子
这个有什么用阿?  回复  更多评论
  
# re: 运行Google CTemplate首页的例子遇到_CrtIsValidHeapPointer异常
2008-08-31 08:06 | zealsoft
@橙子
Google CTemplate是一个模板引擎。模板引擎最早是用在网页设计中的,象ASP就是一个模板引擎。有关详细定义可以参考:http://en.wikipedia.org/wiki/Template_engine_(web)。  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


欢迎访问我的学术博客

<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(13)

随笔分类(28)

随笔档案(27)

搜索

  •  

积分与排名

  • 积分 - 55583
  • 排名 - 383

最新评论

阅读排行榜

评论排行榜