Category Archives: C&C++

现在还靠他吃饭呢

为什么可以引用未包含的头文件内容?

缘起 最近几天奉老大之命学习研究了一下VCF和VCFBuilder。我在修改编译错误的时候发现有些头文件里面引用了其他头文件里面的类,但是在该头文件里面有没有引入任何其他头文件。编译的时候也没有提示这个错误,按照我的惯性思维,这很不可思议啊!这也让我想起了VC编译环境提供的预编译头StdAfx.h也是这个现象,当时就很纳闷,可是没仔细想。这次又碰到了,忍不住想弄个明白,问了几个大虾,没有答案。那就自己来吧。

Posted in C&C++, 为什么?, 技术为本 | 1 Comment

CTreeCtrl 树状控件显示展开和折叠的按钮“+/-”

让树状控件显示展开和折叠的按钮其实是很简单的,把 Style 设置成TVS_HASBUTTONS就可以了。不过你可能会发现根节点却没有展开折叠按钮,咋回事呢?折腾半天也没作用,还是看看MSDN的文档吧。 TVS_HASBUTTONS Displays plus (+) and minus (-) buttons next to parent items. The user clicks the buttons to expand or collapse a parent item’s list of child items. To include buttons with items at the root of … Continue reading

Posted in C&C++ | Leave a comment

解析命令行参数规则 (Parsing C Command-Line Arguments)

这里说的解析命令行参数,并不是说类似getopt的解析函数,而是说win平台的命令行参数是按什么规则传入程序的。前两天我写了个命令行的程序,程序对根目录的处理总是有问题。经过跟踪,发现当输入参数是(“D:\”)的时候,实际程序读到的参数是(D:”)。在路径的两端加上引号,是为了让路径名称中出现空格的时候不会作为参数分隔符处理。可是显然最后一个引号被\转移为 ” 了。 求助于MSDN,终于找到了命令行解析的规则,原文链接:http://msdn2.microsoft.com/en-us/library/aa243471.aspx。这里我做一下翻译: 参数用空格或者TAB进行分割。 一个字符串若被两个双引号包含,则即使其中包含空格或TAB字符也会被视为一个参数。被引起来的字符串可以嵌入参数内。 字符串中存在的双引号可以通过前置反斜杠进行转义。 反斜杠会被解释成单个字符,除非后面紧接着一个双引号。 如果偶数个反斜杠后面跟随一个双引号,每对反斜杠放一个反斜杠到参数中,双引号被解释为一个字符串界定符。 如果奇数个反斜杠后面跟随一个双引号,每对反斜杠放一个反斜杠到argv数组中,双引号则被剩下的反斜杠转义放入到argv中,而不会作文字符串界定符。 这里有几个例子,一看就明白了: Command-Line Input argv[1] argv[2] argv[3] “a b c” d e a b c d e “ab\”c” “\\” d ab”c \ d a\\\b d”e f”g h a\\\b de fg h … Continue reading

Posted in C&C++, 技术为本 | Leave a comment

为发布自动化做点贡献——makefile 中使用 xcopy

用makefile做好了一个工程,不同的模块源代码将会被置于不同的文件夹下,而编译后往往也都只是生成在当前编译的目录下。发布的时候就有点麻烦了,比较笨拙的方法就是,一个个的拷贝出来然后再进行打包。这样显然非常繁琐,如果工程的规模较大,这将是一件非常枯燥的事情。如果把这个枯燥的事情变得自动化是不是比较美好呢? 嘿,这其实是很简单的,你只需要在每一个模块生成的命令的后面利用xcopy来拷贝到目的路径就可以了。这个命令是这么写的: DIST_PATH = D:\dist\bin xcopy /y /r /d /f .\*.dll $(DIST_PATH) 有了这句话,就会把当前编译文件夹下生成的所有DLL都拷贝到目的路径下。下面我来解释一下他们含义: “DIST_PATH = D:\dist\bin” 这样定义一个变量作为发布的路径。 好处是:可以做到一改全改,大家都可以理解咯。 需要注意的是:路径不允许用Unix的`/’来进行分割,xcopy是不认识的。 xcopy 语句的几个参数,可以在dos命令符下用xcopy /?得到帮助。 /y 关闭文件被覆盖的提示信息,保证流程自动化,避免流程被打断。 /r 可以覆盖只读文件,确保拷贝工作的顺利进行:-)。 /d 根据日期,以新文件覆盖旧文件,减少必要的拷贝。 /f 在拷贝的时候显示全部源文件名和目标文件名。 看了这个解释是不是已经能够透彻的理解啦?:-) 当然如果要让这个发布流程都自动化,这样简单的尝试显然是不够的,日后再慢慢探讨吧。

Posted in C&C++ | Tagged | Comments Off

VS2005 编译环境,解决 Runtime Error(运行时错误): R6034。

问题:Runtime Error R6034在VS2005编译环境下,用makefile编译的程序爆出了一个可恶的Runtime Error。错误如下图:提示信息是:Runtime Error!R6034An application has made an attempt to load the C runtime library incorrectly. Please contact the application’s support team for more information.无法正常载入 C runtime library。 问题追因程序生成之后直接执行是没有问题的,而打包后的程序却有问题,看来应该是缺少了什么文件。于是我对编译程序生成的文件一个个删除,并查看检查程序的运行情况。在$(APP).exe.manifest被文件删除之后,R6034现身了,看来罪魁祸首就是它了。我又在MSDN上搜索R6034,得到了这个Error描述的: C Run-Time Error R6034Error Message An application has made an … Continue reading

Posted in C&C++ | 1 Comment