??xml version="1.0" encoding="utf-8" standalone="yes"?> //抽象Ҏ 2. 抽象Ҏ只能在抽象类中声明,虚方法不是。其实如果类包含抽象ҎQ那么该cM是抽象的Q也必须声明为抽象的。如Q?
public class Animal ~译器会报错Q?br>Main.cs(10): 'VSTest.Animal.Sleep()' is abstract but it is contained in nonabstract class 'VSTest.Animal' 3. 抽象Ҏ必须在派生类中重写,q一点跟接口cMQ虚Ҏ不必。如Q?
public abstract class Animal ~译器会报错QMain.cs(14): 'VSTest.Cat' does not implement inherited abstract member 'VSTest.Animal.Eat()'Q因为我们没有实现抽象类中所有抽象方法?/p>
2. 安装MinGWQ添? %YOUR MINGW INSTALL DIR%\bin\ 到系l环境变? Path 中,手动修改\bin\mingw32-make.exe为make.exeQ不改也行,以后执行hȝ点)
3. q行Visual Studio Command Prompt( ?VS2013 x86 Native Tools Command PromptQ?/span>
4. 在命令行H口中,执行%YOUR MINGW INSTALL DIR%\msys\1.0\msys.batQ把MSYS命o行窗口弄出来
5. MSYS中执行一下pwd看一下当前\径,把openh264代码拯到当前\径下某个文g夹,新徏一个也?/span>
6. q入openh264目录Q执? make OS=msvc Q注意大写Q,好了?/span>
]]>
今天早上h又上|搜索了一下HP 6515B相关的帖子,H然发现有h成功ȀzMQ最早的帖子是这:
http://benyouhui.it168.com/thread-985830-3-1.html
然后按照帖子里面的说明,下蝲安装?span style="font-family: Helvetica; border-collapse: collapse; font-size: 14px; line-height: 22px; ">grub4dosQ然后把slic.bin、grldr以及menu.lst复制到C盘下?br>用SLIC_Dump_TooKit查看BIOS的SLIC版本Q原来是昄ErrorQ装了grub4dos以后Q显C?.1了?br>最后用q景论坛上一哥们儿提供的oemȀzd兯行激z,重启以后q是昄没激z,郁闷。然后又执行了一遍这个激zdL卸蝲Q但是好像显CZ么错误,不管他,重启机器?br>不甘心那Q运行SLIC_Dump_TookitQ又昄Error了,再试一遍:安装grub4dosQ这下SLIC又显C?.1了。再重启机器……
q入WIN 7Q按WIN+PauseQ我靠!竟然昄Windows已激zMQ!哈哈?#8230;…gɼ差地让我给弄好了?br>亢奋?#8230;…
后来又在|上发现另外一帖子,也是用差不多的方式激zMQ不q他是导入证书ƈ用keyȀzȝQ?a >http://benyouhui.it168.com/thread-988200-1-1.html
以后有机会可以试试这U方法?br>
接下来开始装各种各样的Y件咯……
]]>
一些说明:
1、界面主要是ZXT的早期版本(大概??q前的版本)中rip出来的代码,做了一些修攏V代码中q有不少问题Q我没有M正。因为我工作中写界面是不用MFC的,q次是ؓ了写q个外挂才把以前的老界面coded来?br>
2、源代码解压后,有个XTUILib目录Q里面就是rip出来的全部XT的代码。把q个目录搞到你的工程中去以后Q还有很多其他事情要做:
Q?Qresource.h中所有以XT或XTP开头的资源IDQ要搞到你的工程去;
Q?Qrc文g中所有以XT或XTP开头的资源Q主要是一些图标、对话框、bitmap之类的)也要搞到你的工程里去Q资源文件在res目录下你可以扑ֈ?br>
3、XT的用,误行到官网或国内其他编E站Ҏ一下,q里׃赘述了?br>
点击q里下蝲Q?52KBQ?img src ="http://www.shnenglu.com/epubcn/aggbug/92913.html" width = "1" height = "1" />
]]>
]]>
public abstract class Animal
{
public abstract void Sleep();
public abstract void Eat();
}
//虚方?br>public class Animal
{
public virtual void Sleep(){}
public virtual void Eat(){}
}
{
public abstract void Sleep();
public abstract void Eat();
}
Main.cs(11): 'VSTest.Animal.Eat()' is abstract but it is contained in nonabstract class 'VSTest.Animal'
{
public abstract void Sleep();
public abstract void Eat();
}
public class Cat : Animal
{
public override void Sleep()
{
Console.WriteLine( "Cat is sleeping" );
}
// we need implement Animal.Eat() here
}
可插入协议扩展(Asynchronous Pluggable ProtocolsQ主要基于异步的URL Moniker技术?IE的URL Moniker在urlmon.dll 动态库中实现的Q?有两U处理机Ӟ
1. ҎURL 协议调用外部E序处理
比如telnet: or news: or mailto:Q当讉Kq些url的时候会打开相应的程序来处理?br>比如要添加note:协议(Registering an Application to a URL Protocol), 则只要修Ҏ册表
[HKEY_CLASSES_ROOT]
[note]
(Default) = "URL:Note Protocol"
URL Protocol = ""
[DefaultIcon]
(Default) = "notepad.exe"
[shell]
[open]
[command]
(Default) = "c:\windows\notepad.exe %1"
在IE 中输?note://xxx.txt 的时候会自动用notepad 打开xxx.txt 文g
2. ҎURL 协议调用cd象来处理
可以ҎURL 协议或者MIME type 注册不同的处理对?br>有两U方式:
a) 通过在注册表URL 协议与COM 对象兌
主要在注册表中的
HKEY_CLASSES_ROOT\PROTOCOLS\Handler # URL 协议
HKEY_CLASSES_ROOT\PROTOCOLS\Filter # Mime Filter
b) 通过临时注册cd象将URL 协议与其兌
// 注册
CComPtr<IInternetSession> spSession;
CComPtr<IClassFactory> spCFHTTP;
HRESULT hr = CoInternetGetSession(0, &spSession, 0);
hr = FilterFactory::CreateInstance(CLSID_HttpProtocol, &spCFHTTP);
hr = spSession->RegisterNameSpace(spCFHTTP, CLSID_NULL, L"http", 0, 0, 0);
// 反注?br>spSession->UnregisterNameSpace(spCFHTTP, L"http");
3. FilterFactory 的实现可以参?br>Asynchronous Pluggable Protocol Implementation with ATL
http://www.codeguru.com/cpp/com-tech/atl/misc/article.php/c37/
Internet Explorer下蝲文g的终极过?/a>
http://blog.csdn.net/111222/archive/2002/02/09/7255.aspx
通过Mime filter技术对|页源码q行qoQ监视下载文Ӟ
http://blog.csdn.net/lion_wing/archive/2006/06/27/839134.aspx
HTML代码qo技?/a>
http://blog.csdn.net/lion_wing/articles/534716.aspx
About Asynchronous Pluggable Protocols QMSDNQ?br>Internet Explorer ~程qͼ九)在自q览器中嵌入Google工具?/a>
http://blog.csdn.net/CathyEagle/archive/2005/12/12/550698.aspx
?000分,高手q来动手试试Q如何提取AJAX里的HTML内容Q?br>http://topic.csdn.net/t/20061214/12/5230161.html
q里主要通过监视IE 的下载从而保存Google Map 的地图数据文? 通过监视http & text/html & application/javascript 的内Ҏ获取囄文gURL ?信息.. :)
原文链接Q?a title=http://www.51testing.com/?103489/action_viewspace_itemid_70804.html >http://www.51testing.com/?103489/action_viewspace_itemid_70804.html
之前一个朋友问hQ说做了那么多年开发,谈谈有些目Zp|。朋友说目p|很大的原因是在合同问题,合同没有很好的列出项目范围。其实,合同的范围只是一般的范围Q详l内容应该不属于合同的一部分。所以我觉得目最大的问题q是需求没做好。需求没有做好,主要表现在以下几个方面:
一、需求采集与分析
1、需求采集分析时Q没有从完整的业务流E出发,Ҏx主要业务需求,而造成ơ要业务需求块的遗漏?
之前查了我们公司一个重要项目的需求做得咋P光看需求提问单Q就发现大部分问题是关于功能需求的。而问起业务需求时Q他们说都很清楚了,但问起业务上l节处理Ӟ大家都恍然大悟:“哦,q里需要再问下客户...”?
2、开发h员除了关注采集功能需求、外部接口需求、性能需求和一般的标准需求外Q往往Ҏ忽略pȝ领域的背景、操作环境需求、用LD需求(例如用户熟练使用的工具与ҎQ等?
二、需求定义与认
需求规D明书是将Z思想中的概念和目标{换成正式的文档,在这个过E中Q很Ҏ产生错误Q例如表达不完整Q不正确的事实,不一致或模糊的需求等。因此,一定要正确详细的进行需求定义与验证Q确保规格化的内容确实是用户所需求的东西?
三、需求变?/strong>
需求变更管理有两个斚wQ一是与客户怎样变更达成一_一个是q行变更程控制zd。在q两个方面都Ҏ出错?
1、与客户达成一致方面,需要让客户意识到变更对目影响的后果,要技巧?友好性的变更加入到协商条款中。在评估需求变更达C定的影响Ӟ要试囑֍商控制变_以保证在需求变更下Q项目可以l成功?
2、变更流E控制活动,包括怎么q行变更hQ怎么q行变更批准{过E控Ӟq要考虑为处理变更估计留出时间等{方面的问题。这斚w不遵循过E控制流E来赎ͼ很容易导致花大功夫补救的后果?
我们公司已经对变更没有做很好的控Ӟ吃了很多亏。我们项目组是驻客户所在地办公Q开发h员经常接到客L话来提出一些功能性的变_考虑到是变_又受“客户是上帝、提高客h意度”{思想的媄响,也就痛快{应Q甚臛_Z改程序发布。客h高兴了,短期来看Q效率高Q而且q与客户打好关系。可长期来看Q上此以往Q这U行为就变成“没有跟客戯成?#8221;的花费,q还是小事,更严重的问题是,q种没有l过整体评估、媄响分析、风险识别与分析的行为,有可能改了东Ӟ拆坏了西Ӟ到最后要p更大的胦力去弥补Q吃力不讨好Q更甚的后果是因些漏z,q迟拖g目验收旉Q从而导致项目失败?
]]>
[二.{略性的作业方式]
8. 错虫愈晚清除Q时间花得愈多。毕竟,您得知道E序是怎么写的Q才能判断那里出了错虫;刚写完的E序记忆ҎQ一q前写的E序可能早就忘了?br>9. 在开发的q程q即除虫,可以让您早些学到l验Q然后就不会再犯同样的错误;相反圎ͼ如果C目后期才发玎ͼ您可能已l犯q多ơ同L错误而不自知?br>10. 发现错虫而立即除错是一U缓冲器Q提醒那些讲求快速而不够}慎的E序设计师,以后多加心。如果您坚持错虫全都清除了才能开发新的功能,可以防止所有的E序处于半完成状态,因ؓ错虫太多而ə目延误乃至无法推出Q相反地Q如果您允许错虫的存在,{于是埋下了目失控的地P最后看似完成的目Q其实已l失控?br>11. 若能保持没有M错虫Q您p比较准确估出目的完成时间。不必猜? 2功能和1 742个错虫共要花费多时_只要估算3 2功能的工作旉p了。更重要的时Q万一到时候有些功能做不完Q您可以做多算多少Q因Y件一直保持在无错误状态?br>12. 不要把策略性工作方式当作训l的教条Q应该向l员解释q些工作方式的内涵与用意?br>13. 提出_详尽的问题,可以引导出真正有效的{略性工作方式,帮助目目标利完成?br>14. {略不是ȝ定律Q要把它当作指导原则来活用。大部分的时候都应该遵@Q但也有例外的时候?
[三.保持q度] [四.走向极端的狂热] [五.q度狂] [六.学无止境] [七.态度问题] [八.沉船的感觉]
15. 定期暂停手边的工作,然后往前思考,随时做必要的修正Q以避免未来的大障碍?br>16. 有什么事情是我今天能做,而且可以帮助目在未来几个月内顺利进行的Q?/strong>
17. 不要费旉在错误的问题上,一定要先确定真正的问题在哪里,然后才去Ҏ它?br>18. Z开口要求的东西未必是他真正惌的。处理他的要求之前,请务必确定他I竟惌做什么?/strong>
19. l对不要{应别h自己做不到的事情Q这样对双方都有益无実?br>20. 不要Z讨好别h而伤宛_方的工作q程Q您永远要根据自q目标Q做适当的决{?br>21. 是您在ؓ目负责。不要让M人的ȝ目的进行,包括上的徏议?br>22. 天下没有真正免费的Y?br>23. 应该开发策略上h重要性的功能Q而不是把媒体的评比项目都做齐全?br>24. 软g产品的开发,不能只ؓ了有、挑战性,或是够有个性够令h眩目?br>25. 不要把时间浪费在无法改善产品的工作上Q即使这么做在将来会有潜在的利益Q也要与现在投入的时间成本做个衡量?
26. 定您所要求的报告真的值得属下暂停工作Q花那么多时间去写?br>27. 利用目查报告来改进软g开发的工作E序。ؓ了报告发生作用Q报告中必须实描述我们q次解决问题的每一个详l步骤,以及来应该如何q用q项新发现?br>28. h意定期会议的价|定它值得每个人放下手上的工作?br>29. 召开M会议之前Q请定本次会议的目的是什么,达成q个目的的条件是什么,然后Q务必达到开会的目的?/strong>
30. 试着排除不必要的后箋工作?
31. 不要利用q程表来׃ə目的进行,q对组的士气伤宛_大了?br>32. 让日E表l持适度的紧q,但又是可以做到的Q好让组员振奋、不松懈Q专心致力于目的推q?br>33. l对不要草率定出不可能的期限Q导致组员ؓ了赶q度而损害品的质量?/strong>
34. 把长期的大项目,分成几个完整而独立的项目,各小目必须有一个主题?br>35. Z保持创意的活力和团队士气Q必让每一个小目都有令h兴奋的结果?br>36. 产品的质量远比遵守期限重?
37. 不要让程序设计师的学习停滞不前,要让E序设计师有Z练不同领域的技术,培养十八般武艺样L通的l员?br>38. 训练新进E序设计师时Q先培养他对整个公司所有项目都有h值的技术,然后才培L目独有的技术?br>39. 不要舍不得放您最优秀的程序设计师到别的项目去。如果他在您的项目已l没有新的东西可学,Z公司和他个h的前途,您应该把他推荐到别的目Q让他的成长怸间断?br>40. 定每位l员、每两个月都有一Ҏ术上q步?br>41. 一发现某处需要改q,q即采取更正的行动?br>42.不要用年l考评来订立学习目标,要利用年l考评来记录个人的成长?/strong>
43. l对不要让组员一直做同样的工作,q样是限制了他的学习Q他停滞在原来的领
域。一旦程序设计师_N了某一个领域,p他换别的领域做做看,永远让他们学习新的技术?br>44. 各种技术的用途范围有所不同Q有的技术在一般的目都用得上Q有的技术只有在特定性质的项目才用得上。当您训l您的组员时Q必让他们的技术能在公司发挥最大的用处Q最好的办法是Q把应用范围最q的技术放在训l的最前期Q应用范围最的技术放在最后训l?br>45. 优秀的程序设计师是项目经理最需要的Q所以经理们通常舍不得让自己手下功力最强的人到别组去,但是如果q位W一高手在本l内再也没有C西可学时Q经理就应该让他到别的项目去Q一斚w他个人可以重新开始另一ơ的成长Q一斚w让接替他的h学着承担重要的工作,最后公司的q_E序技术水准因而提升,对大安很有好处?/strong>
46. Z保每位E序设计师的技术都在稳定地q步Q一定要让每个h有个努力的目标,最好的Ҏ是把个h的成长和目每两个月的阶D|目标相l合Q这样一q就有至六ơ的q步了。假定一位组员在公司待了五年Q那么他学? 0U新技术、或是读? 0本好书、或? 5Ҏ术加1 5本书Q对他的工作能力影响多大啊?br>47. 最好的成长目标是出于当时的需要。如果您发现有位l员工作~Z效率Q或L在犯同样的错误,最好抓住机会立即ؓ他立一个目标,q且要求他立d始改q。这U当时设立的目标让h印象深刻Q又是马上寻求改善,效果通常会非常好。比起年l考评那种模模p糊的徏议,更能引vE序设计师的重视?
48. 要让每一位程序设计师都明白,写出雉误程序是很不Ҏ的,所以应该多花功夫用各种Ҏ做最d的测试?br>49. U正E序设计师以为加除错码会花太多时间的观念Q应该训l程序设计师W一个反应是考虑加上除错码是否有道理Q第二是考虑加除错码是否W合目的目标与工作的优先?br>50. 当某“某g事不可能做到”Ӟ他往往是错?/strong>?br>51. 不要让凡事不能的态度ȝ了创新?br>52. 使用者和E序的撰写者一样关心速度和品质的问题?br>53. 不要让程序设计师以ؓ使用者ƈ不在乎Y件的质量?br>54. 不要l用者次品,宁愿延期交货Q务必追求质量完?br>55. E序设计师必ȝ总使用者的观点来看自己写的E序Q程序设计师必须能体会用者的感受?br>56. 在包装盒里的每一件东西,都是产品的一部分?br>57. 程序的重用性当作优先考虑的目标之一Q否则程序设计师经常做重复的工作?br>58. 充分利用现有资源或创造新资源Q以便从每一工作中获得更大的h倹{程序代码的再利用,是很好的例子,当然Q还有其他的地方可以q用“杠杆原理”?br>59. 如果您创造了一资源,q且让别人知道,那么L一天会z上用场?br>60. 从您的每件工作中创造最大的资源Q不是利用现有的杠杆,或是创造新的杠杆?br>61. 心那种“太难?#8221;?#8220;太花旉”或是“太麻?#8221;的反性反应。当您遇到别人有q种反应Q请先问自己他有没有认真思考过qg事的重要性、以及是否符合项目目标,如果您认Z其实未经深思熟虑,只是直觉的反应,那您应该把您的x告诉他,请他重新评估Q也许就会有公^的答案?br>62. Z遇到l验范围之外的事情,多少有恐惧感Q就会认?#8220;q完全不可能”而强烈反寏V试着消除q种习惯性的反应Q设法给l员灌输“只要花时间想想看Q大部分的事情都做得?#8221;的观c您不妨以这个问题来对付那种“凡事不能”的态度Q?#8220;我了解这是做不到的,但是‘如果’做得刎ͼ那你会怎么做?”然后您就会发现惊人的转变Q您马上׃听到l员七嘴八舌地说应该q样做、那样做Q说的是他们刚刚坚持做不到的事情。这?#8220;如果”把他们带ȝ觉的反应Q带到全新的思考模式,q才是他们应该做的?br>63. 把用者当作什么都不懂的外行hQ是非常不好的观c每当您发现有h表露U心理,一定要立即U正Q提醒他们用者才是真正受产品好坏影响最q人,他们和程序设计师一样关心Y件的执行速度和质量?br>64. 杠杆原理是您最有用的观念,扑ֈ您工作中的杠杆,您可以ؓ组、项目、公司、甚臌Y件业创造无可限量的价倹{无论如何,量利用资源q创造资源,q个原则是绝寚w不了的。在您写E序的时候注意程序代码的׃n性、训l组员的时候注意到他对公司的h|即是像函数命名q种事Q都有杠杆的存在。不做M事,都要惛_“善用资源”Qؓ未来做好准备?
65. 如果q度发生落后Q那表示有个地方出错了。您应该扑և问题Qƈ加以解决Q不要一呌求组员加班,在问题没有解决之前,加班是没有用的?br>66. 别误信加班等于增加生产能力,长期的加班只会伤害生产能力,寚w目没有帮助?br>67. 周末是属于组员私人的旉Q不是公司的。公怸应该以打败竞争对手ؓ理由Q要求员工周末加班?/strong>
68. 思考的重要性,而不是长旉工作?/strong>
69. 训练开发小l懂得在正常工作旉内掌握好工作的效率,不要让他们超时工作,因ؓ时工作只是费旉的假面具?br>70. 与程序设计师共同研拟Z份每日活动的旉表,把无法预期的临时公务变成固定旉处理的事情,q且把程序开发的工作攑֜最优先的地位,不要让其他次要的事情q扰到写E序?br>71. l常加班是目出问题的明显信号Q也许是因ؓȝ的观念错误或是目标不够清楚,不论是什么原因,目l理l对不能忽视q种现象Q要对这个问题正处理,目l理必须协助l员在每? 0时的工作时间里Q把事情做得更有效率?br>72. 我经常听到高层主称赞组员每天ؓ公司工作很长的时_“您对公司的A献值得嘉奖Q做得很好!”q绝Ҏ错误的信息,员工应该是因为工作做得好而受到称赞,而不是因为在办公室待得久Q管理者不该把“生效率”?#8220;工作旉”混ؓ一谈,有的Z许可以用更少的时_完成两倍的工作呢?/strong>
73. Z让组员把办公旉用在正确的地方,q提高部门的工作效率Q项目经理不但要Z们排除Q何不必要的会议、报告和杂事Q还要协助他们好好运用宝늚上班旉。您应该协助l员安排适当的每日活动表Q用一些小技巧,让组员有长段又不受干扰的旉Q适合q行开发工作?br>74. 如果您关心组员的生活Q就不要让他们把全部的时间都投入在工作。每天只要确定他们卖力工作了八小Ӟ可以把他们赶出办公室了Q当然这样做也许会有老板看不眼Q但是如果您像我一L信均衡、健L生活是一切创意的原动力,坚持这份理念吧Q?br>75. 每周工作4 0时q不是金U玉律,只不q是国的传l,而Y件开发项目大都以此ؓ前提~定日程表。所以如果一个项目需要程序设计师每周工作40 时以上才能赶上q度Q就表示有问题,也许是日E表定得太乐观,也许是程序设计师需要再训练。不怎么_q个问题一定要认真解决Q绝对不应该让程序设计师加班来I补这个漏z?/p>
]]>
一、全心投入工作(work harder at what you doQ:当你工作Ӟ一定要全心投入Q不要浪Ҏ_不要把工作场所当成C交场合。光q个U诀Q如果你能长期实践,p使你的生产力加倍?
二、工作步调快Qwork fasterQ:L一U紧q感Q一ơ专心做一件事Qƈ且用最快的速度完成Q之后,立刻q入下一件工作。养成这习惯后,你会惊讶地发玎ͼ一天所能完成的工作量居然是如此地惊人?
三、专注于高附加值的工作Qwork on higher-value activitiesQ:你要C工作时数的多寡不见得与工作成果成正比。精明的老板或是上司兛_的是你的工作数量及工作品质,工作时数q重点。因此聪明的员工Q会惛_法找出对达成工作目标及W效标准有帮助的活动,然后投入最多时间与心力在这些事情上面。投入的旉愈多Q每分钟的生产力愈高,工作l效也就提高Q自然赢得老板及上司的赏识与重用,加薪与升q在望?
四、熟l工作(do things you are better atQ:你找出最有h值的工作目后,接着要想办法Q通过不断学习、应用、练习,熟练所有工作流E与技巧,累积工作l验Q一句话解决KNOW HOW的问题)。你的工作愈U熟Q工作所需的时间就愈短Q你的技能愈熟练Q生产力提升得愈快?
五、集中处理(bunch your tasksQ:一个有技巧的工作人,会把许多性质相近的工作或是活动,例如Q收发E-MAIL、写信、填写工作报表、填写备忘录{等Q集中在同一个时D|处理Q这样会比一件一件分开在不同时D处理,节省一半以上的旉Q同时也能提高效率与效能?
六、简化工作(simplify your workQ:量化工作流E,许多分开的工作步骤加以整合,变成单一dQ以减少工作的复杂度Q另外,q用授权或是外包的方式,避免把时间花费在低h值的工作上?
七、比别h工作旉长一些(work longer hoursQ:早一点v床,早点M班,避开交通高峎ͼ中午晚一点出ȝ,l箋工作Q避开排队用餐的h潮;晚上E微留晚一些,直到交通高峰时间已q,再下班回家。如此一天可以比一般h多出2?个小时的工作旉Q而且不会影响正常的生zL调。善用这些多出来的时_可以使你的生产力加倍,q而你的收入加倍。一个成功的人,通常是一个行动派的hQ一旦懂得提升生产力的方法,׃这7个小U诀Q默记在心,不断地应用、练习,直到成ؓ工作、生zȝ习惯为止。只要养成这个习惯,你的生力一定会提高Q收入也会加倍?/p>
q个cL有Q何实玎ͼuuid数据存储于其特化版本,看以下的代码
现在我们可以通过 _UuidTraits<TheClass>::uuid 来取cClassA的uuid来,方便使用我们定义一个宏
#define __uuidof(x) (_UuidTraits<x>::uuid)
但这样只实现了ClassA的uuidQ如果ؓ每个c都写一个_UuidTraits的特化版本有点篏Q但我们可以用宏来简?br>
q样我们可以方便的为类定义uuid了,比如Q?br>
OKQ现在试试__uuidof(ClassB)Q应该返回字W串"ClassB"了?br>q有一点要说明的是Qؓ了能兼容UNICODEQ可以定义两个版本的DEFINE_UUIDQ?br>
q样在用UNICODE字符~码~译Ӟ__uuidofq回的就是unicode字符串了
一个由C/C++~译的程序占用的内存分ؓ以下几个部分:
二、例子程?/strong>
q是一个前辈写的,非常详细?/p>
三、堆和栈的理论知?/strong>
2.1 甌方式
stack:
ql自动分配。例如,声明在函C一个局部变量int b;pȝ自动在栈中ؓb开辟空?br>heap:
需要程序员自己甌Qƈ指明大小Q在c中malloc函数
如p1=(char*)malloc(10);
在C++中用newq算W?br> 如p2=(char*)malloc(10);
但是注意p1、p2本n是在栈中的?
2.2 甌后系l的响应
栈:只要栈的剩余I间大于所甌I间Q系l将为程序提供内存,否则报异常提示?br> 溢出?br>堆:首先应该知道操作pȝ有一个记录空闲内存地址的链表,当系l收到程序的甌Ӟ
会遍历该链表Q寻扄一个空间大于所甌I间的堆l点Q然后将该结点从I闲l点
链表中删除,q将该结点的I间分配l程序,另外Q对?
大多数系l,会在q块内存I间中的首地址处记录本ơ分配的大小Q这P代码中的delete语句才能正确的释放本内存I间。另外,׃扑ֈ的堆l点的大不一定正好等于申L大小Q系l会自动的将多余的那部分重新攑օI闲链表中?
2.3 甌大小的限?/strong> 2.4甌效率的比?/strong> 2.5 堆和栈中的存储内?/strong> 2.6 存取效率的比?/strong>
char s1[]="aaaaaaaaaaaaaaa"; 2.7 结
栈:在Windows?栈是向低地址扩展的数据结构,是一块连l的内存的区域。这句话?br> 意思是栈顶的地址和栈的最大容量是pȝ预先规定好的Q在WINDOWS下,栈的?br> 是2MQ也有的说是1MQM是一个编译时q定的常数Q,如果甌的空间超
q栈的剩余空间时Q将提示overflow。因此,能从栈获得的I间较小?br>堆:堆是向高地址扩展的数据结构,是不q箋的内存区域。这是由于系l是用链表来?br> 储的I闲内存地址的,自然是不q箋的,而链表的遍历方向是由低地址向高地址?br> 堆的大小受限于计机pȝ中有效的虚拟内存。由此可见,堆获得的I间比较灉|Q?br> 也比较大?
?ql自动分配,速度较快。但E序员是无法控制的?br>?是由new分配的内存,一般速度比较慢,而且Ҏ产生内存片,不过用v来最方便.
另外Q在WINDOWS下,最好的方式是用Virtual Alloc分配内存Q他不是在堆Q也不是?nbsp;
?而是直接在进E的地址I间中保留一块内存,虽然用v来最不方ѝ但是速度快,
也最灉|?
栈:在函数调用时Q第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可
执行语句Q的地址Q然后是函数的各个参敎ͼ在大多数的C~译器中Q参数是由右向左
入栈的,然后是函C的局部变量。注意静态变量是不入栈的。当本次函数调用l束
后,局部变量先出栈Q然后是参数Q最后栈指针指向最开始存的地址Q也是d
C的下一条指令,E序p点l运行?br>堆:一般是在堆的头部用一个字节存攑֠的大。堆中的具体内容q序员安排?
char *s2="bbbbbbbbbbbbbbbbb";
aaaaaaaaaaa是在q行时刻赋值的Q?br>而bbbbbbbbbbb是在~译时就定的;
但是Q在以后的存取中Q在栈上的数l比指针所指向的字W串(例如?快?br>比如Q?br>#include
voidmain()
{
char a=1;
char c[]="1234567890";
char *p="1234567890";
a = c[1];
a = p[1];
return;
}
对应的汇~代?br>10:a=c[1];
004010678A4DF1movcl,byteptr[ebp-0Fh]
0040106A884DFCmovbyteptr[ebp-4],cl
11:a=p[1];
0040106D8B55ECmovedx,dwordptr[ebp-14h]
004010708A4201moval,byteptr[edx+1]
004010738845FCmovbyteptr[ebp-4],al
W一U在d时直接就把字W串中的元素d寄存器cl中,而第二种则要先把指针D到edx中,在根据edxd字符Q显然慢了?
堆和栈的区别可以用如下的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜Q发出申P、付钱、和吃(使用Q,吃饱了就赎ͼ不必理会切菜、洗菜等准备工作和洗、刷锅等扫尾工作Q他的好处是快捷Q但是自由度。用堆p是自己动手做喜欢吃的菜肴Q比较麻烦,但是比较W合自己的口呻I而且自由度大?/p>
大概看了一下,g是对WTL的一些东西的装Qƈd了可视化向导对话框,使用h更方便,上手h比较Ҏ。但是我现在q没搞清楚他整个的目录结构?/p>
先记录下来,有空的时候研I研I?)