| 建军's profiledino的共享空间PhotosBlogLists | Help |
|
March 25 悲惨世界本文谨此纪念这段时间的悲惨生活。
信用卡爆了,工资卡掉了,人生的悲剧不过于此,如果再加上大牙松动吃饭不能下咽,嘴角生疮满嘴是泡而没有钱去就医,这样的生活又该怎么形容呢?
人生啊人生…… March 15 今日一别,不知何时才能相见 繁忙的工作让我失去了与文字的接触,却只有心中的失落才让我再次唤醒。
在这样一个城市的相遇是我们谁也没有想到的,即使在毕业之前充满的无数幻想,也没有猜到会是这样一个地方。而事实却真的是这样,在我加班几个夜晚之后,她空降到了这个城市,对于我们来说无比陌生的城市。
见面之前总是非常地激动,可真正在地铁站见面的时候心里却异常恬静,记得在她的身边我总是这样的感觉。人生的长河在偶然之间让我们短短地相聚两年后又为着各自的命运而分离,刚浅尝社会这杯苦酒不到一年的我们也不能对人生发出多少叹息。在一些闲谈之时,我脑海里总是浮现着不久前的岁月片段,第一次见面带着她们找宿舍时我的青涩,在夜晚的华师漫步欣赏夜景时的安静,在她某个纪念日陪着逛街吃小吃的无耐。能在这个城市来回味这样的事情的确非常特别。
一周很快过去,我的工作太忙了,我们也只能匆匆相见两面。在地铁站的分别最让我心酸,目送她走上地铁往一个方向驶去后,我却不得不坐上反方向的列车,人生的一段短暂相聚又再次分离背驰,分别的话语,也只能是“希望下次能够再见”,可是下次会是什么时候呢?
我的心里也只有一句话反复着,今日一别,不知何时才能相见…… September 20 如何使VC在每次编译后自动增加其版本信息这完全是我的英文翻译,为了那些和我一样英语别扭的技术员不再多受语言障碍之苦。
翻译不好请见谅,原文请见:http://support.microsoft.com/?id=237870
摘要:
Visual C++ 并不具备在每次编译后自动增加版本资源信息的能力,本文介绍一种方法来实现这一功能。
相信介绍:
你可以按照以下的步骤写一段程序来更改资源编辑文件(.rc)。rc文件是在VC的控制之下,VC在保存的时候才修改rc文件,此时才会影响到版本资源信息。下面描述的方法能够适用于所有的VC工程。下面举例说明。
建立一个MFC(.exe)的新工程,取名为"MyProject",该工程将产生一个MyProject.rc的资源文件,这个rc文件包含了一个名为MyProject.rc2的文件。.rc2文件是用户定义资源。请按以下步骤操作:
1、移除.rc文件的版本信息,将其放到.rc2之中。
a.用文本编辑器分别打开.rc和.rc2文件(在RES文件夹中):在VC中文件菜单选择"Open",在弹出对话框的"Open as"中选择"text",然后选择.rc文件打开。
b.在.rc中找到版本资源描述,类似于下面的信息:
///////////////////////////////////////////////////////////////////////
// // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x4L FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "Sample Application\0" VALUE "CompanyName", "Microsoft Corp.\0" VALUE "FileDescription", "MyProject MFC Application\0" VALUE "FileVersion", "1, 0, 0, 1\0" VALUE "InternalName", "MyProject\0" VALUE "LegalCopyright", "Copyright (C) 1999\0" VALUE "OriginalFilename", "MyProject.EXE\0" VALUE "ProductName", "MyProject Application\0" VALUE "ProductVersion", "1, 0, 0, 1\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END c.将.rc文件的版本资源描述剪切,粘贴在.rc2的"Add manually edited resources here..."文字下方。具体每个直接代表什么意义,请查看MSDN的帮助文档。
2、分别替换FILEVERSION 和PRODUCTVERSION 的值为宏变量FILEVER 和PRODUCTVER。类似的,替换字符串变量FileVersion 和ProductVersion 的值为宏变量STRFILEVER 和STRPRODUCTVER。
3、在VS_VERSION_INFO 资源声明前添加"#include VersionNo.h"。此时.rc2的版本信息应该为如下:
///////////////////////////////////////////////////////////////////////
// // Version // #include "VersionNo.h" VS_VERSION_INFO VERSIONINFO FILEVERSION FILEVER PRODUCTVERSION PRODUCTVER FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x4L FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "Sample Application\0" VALUE "CompanyName", "Microsoft Corp.\0" VALUE "FileDescription", "MyProject MFC Application\0" VALUE "FileVersion", STRFILEVER VALUE "InternalName", "MyProject\0" VALUE "LegalCopyright", "Copyright (C) 1997\0" VALUE "OriginalFilename", "MyProject.EXE\0" VALUE "ProductName", "MyProject Application\0" VALUE "ProductVersion", STRPRODUCTVER END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END 4、在你的工程下建立一个叫做"VersionNo.h"的头文件,文件包含内容如下:
#define FILEVER 1,0,0,1
#define PRODUCTVER 1,0,0,1 #define STRFILEVER "1, 0, 0, 1\0" #define STRPRODUCTVER "1, 0, 0, 1\0" 提示:在最后一行添加换行和回车符号
5、VersionNo.h里面的内容将会被Visual Basic Script 宏修改。下面介绍的这种宏处理Visual C++ BuildFinish事件,因此在它编译完成前一定不要退出。不论什么时候这个VB脚本语言被调用,它都会在保存退出的时候固定增幅地增加头文件的版本号。这样就能实现版本号的自动增加。
安装和使用VB脚本语言,按照如下操作:
a.用VC打开一个现有的DSM (macro)文件或者新建一个。如果是新建,Vc中点击"New",在文件菜单中选择"Macro File "。
b.复制粘贴以下的语句(an empty DSM file cannot be installed in Visual C++; the next step explains installing)
Function GetProjectDir(FullName)
'VC++ doesn't provide any method for getting the path of the active project 'See the VB Script reference for more information on the VB Script functions 'used in this function Dim proj_path proj_path = Split(StrReverse(FullName),"\",-1,1) Dim count count = UBound(proj_path) Dim full_path full_path = "" Dim i for i = 1 to count full_path = full_path & "\" & proj_path(i) next GetProjectDir = StrReverse(full_path) End Function Sub ReplaceText(selection, count, incrementby) 'selection represents the TextSelection object 'count represents the position of the version number to be incremented 'incrementby represents a number that will be added to the existing version number selection.WordRight dsMove, count selection.WordRight dsExtend, 1 Dim str str = selection.Text str = str + incrementby selection.Text = str End Sub Sub Application_BuildFinish(numError, numWarning) 'This event will be triggered after every build of a project 'You can check numError and/or numWarning to determine if you want to continue 'If numError <> 0 Then 'exit sub 'Obtain the full path of the active project Dim full_path full_path = GetProjectDir(ActiveProject.FullName) full_path = full_path & "versionno.h" 'Open the VersionNo.h file Documents.Open full_path 'Obtain the TextSelection object Dim selection set selection = ActiveDocument.Selection selection.StartOfDocument 'Increment the version information ReplaceText selection, 9, 1 selection.LineDown selection.StartOfLine ReplaceText selection, 9, 1 selection.LineDown selection.StartOfLine ReplaceText selection, 10, 1 selection.LineDown selection.StartOfLine ReplaceText selection, 10, 1 ActiveDocument.Save ActiveDocument.Close End Sub 提示:以上代码仅是示例,具体应该根据实际情况修改
c.如果DSM没有被安装过,则按如下安装:在"Tool"菜单选择Customize ,点击Add-in and Macro Files 标签,浏览选择DSM文件,并选择关闭。
6、编译MyProject.exe,编译完成后查看VersionNo.h文件,它将变成以下内容:
#define FILEVER 1,0,0,2
#define PRODUCTVER 1,0,0,2 #define STRFILEVER "1, 0, 0, 2\0" #define STRPRODUCTVER "1, 0, 0, 2\0" 如果再次编译,版本信息会再次增加。如果编译错误,在早期的宏描述中做一些更改预防版本号增加。 September 17 善意的谎言昨天中午陪着小刘去拉头发。我知道这将是一个难熬的下午,所以进了理发店我就早早跑到一个角落坐起翻着买的报纸回味中国女足被巴西羞辱的场景,什么发型,什么价位都让她自己去决定吧,我是最不喜欢听那些理发师对着你甜言蜜语,又是赞扬又是找缺点,想尽各种手段让你多掏钱。
刚回味到那个韩傻丢的第三个球(第一场打丹麦的时候我就非常怀疑她会做出这样的举动来取悦观众),小刘屁颠屁颠地跑了过来,“老公,我要用沙宣!”看着她的满脸激动,我当然不能说任何的意见。“要得,用沙宣头发更柔顺啥”。她幸福地又走回理发师边上做起准备工作,我也继续着我的痛苦回味。
把报纸上的所有广告仔细浏览了一遍,再回顾了两遍韩傻丢球的经典动作之后,我站起身来去巡视一下小刘的工作进度。她在上发膏,理发师一边弄一边吹嘘着这个发膏的效果多好,颜色好看,还有淡淡香气喔。我苦笑了一下,估计这头发没有5个小时是弄不好的了。我无聊地拿起了装发膏的包装盒,果然是VS,和洗发水一样的血红色包装,大大的VS在上面特别显眼。就像刚才看广告一样,我仔细地看着,唔,不对!这上面赫然印着两个字:“莎萱”!我纳闷了,什么时候沙宣换商标了?多加了俩草头?再仔细看看生产地,广东东莞某镇某村!我晕,我知道东莞是一个灰常发达的地方,但沙宣怎么也不可能把厂址放在那里吧?我懂了,小刘被那个美发师给蒙鸟!
我正准备告诉小刘,但转过去一看,她正买脸笑容地看着我“沙宣的,感觉真的还不错,呵呵”。我可无语了,小刘啊小刘,看来对社会上的一套,你确实还是太太太单纯了。我如果现在告诉她这是冒牌货,她一定会马上把这个理发店弄翻天,更重要的是,那美好快乐的心情不知道要多久才能补回来。我能告诉她这是冒牌的吗?我决定做一个善意的谎言,装着不知道的样子,买脸堆笑地赞扬着她。她就是那么个小孩子,她需要的是做头发的感觉,具体用什么发膏重要么?呵呵,至少在我看来,让她幸福才是最重要的。
小刘不会用MSN,所以我才把这件事给写在space上,我打算就让她一直被这个发型而收获自信吧。她还刚读研究生,一切都发展得还不错,真的希望以后的她能永远保持自己的单纯,做一个快乐的女神。 September 04 DLL在Release下的调试方法 在做一个DLL的开发时想与一个测试程序联合调试,而且不用把工程与测试程序联合起来。遇到了各种错误搞得我心中很是不爽,出现了“one or more breakpoints cannot be set and have been disabled”的错误信息让我花了好长时间终于解决,趁现在有空的时候把解决的方法记录下来,以供以后需要的朋友参考。
有很多人也许认为在Release状态下VC是不能进行调试的,其实并不是这样。对于DLL工程的Release调试方法如下:
1、如果该DLL还静态调用了其它的DLL,则进行第二步,否则去第三步;
2、进入Project Setting -> Debug,在Category中选择Additional DLLs,把本工程需要静态调用的DLL添加到下面的列表框中;
3、进入Project Setting -> C/C++,在Debug info中选择Program Database;Optimizations中选择即使是Maximize Speed也没有关系,选择Default也可以;
4、进入Project Setting -> Link,在Category中选择Debug,选中Debug info 复选框和Microsoft format;
5、ASSERT宏在发行版本中不起作用,而应该用VERIFY来进行发行版的调试。如果发行版本运行有问题,可以先禁止所有代码优化再进行调试。 August 07 [转]H.264 picture parameter sets成员值含义picture parameter sets 1. pic_parameter_set_id 2. seq_parameter_set_id 3. entropy_coding_mode_flag 4. pic_order_present_flag 5. num_slice_groups_minus1 6. slice_group_map_type 7.run_length_minus1[i]被用来赋给在光栅扫描中第i个切片组指明连续切片组单元的数量.run_length_minus1[i]的取值应为0到PicSizeInMapUnits-1. top_left[ i ] and bottom_right[ i ] specify the top-left and bottom-right corners of a rectangle, respectively. top_left[ i ] and bottom_right[ i ] are slice group map unit positions in a raster scan of the picture for the slice group map units. For each rectangle i, all of the following constraints shall be obeyed by the values of the syntax elements top_left[ i ] and bottom_right[ i ] 8.top_left[i] and bottom_right[i] a) top_left[i]应该比bottom_right[i]小或等于,bottom_right[i]应该比PicSizeInMapUnits的值小. 9. slice_group_change_direction_flag在slice_group_map_type为3,4,5时跟slice_group_map_type一块儿来提取生成映射类型, 10.slice_group_change_rate_minus1 11. pic_size_in_map_units_minus1 12. slice_group_id[i] 13. num_ref_idx_l0_active_minus1指明了参考图像列表0中的最大参考索引值,它被用来解码图像的每一个切片,列表0在num_ref_idx_active_override_flag值为0的时候被使用.当MbaffFrameFlag值为1时,num_ref_idx_l0_active_minus1是解码帧宏块的最大索引值,而2 * num_ref_idx_10_active_minus1 + 1是解码场宏块的最大索引值.num_ref_idx_l0_active_minus1的取值为0到31. 14. num_ref_idx_l1_active_minus1与num_ref_idx_l0_active_minus1有相同的语义,只不过它是针对列表1来说的. 15.weighted_pred_flag 16. weighted_bipred_idc 17.pic_init_qp_minus26指出了对于每个切片来说的SliceQPY的初始值减26.初始值在切片层中当非0的slice_qp_delta被解码后时改变,在非0的mb_qp_delta值被在宏块层解码时再次被改变.pic_init_qp_minus26应该取-26到+25. 18. pic_init_qs_minus26 19.chroma_qp_index_offset 20. deblocking_filter_control_present_flag 21. constrained_intra_pred_flag
|
|
||||
|
|