- 博客(43)
- 资源 (6)
- 收藏
- 关注
原创 vc crt的malloc相关
http://www.olivierlanglois.net/CFixAlloc.htmlVC\crt\src下面有具体的malloc实现,是直接调用heap系列函数,没有glibc的内存池的概念,而且开销巨大,以前从没注意过这一点
2011-08-10 13:10:23
963
原创 crgn相关
crgn直接调用的hrgn,具体保存数据的是typedef struct _RGNDATAHEADER { DWORD dwSize; DWORD iType; DWORD nCount; DWORD nRgnSize;
2011-08-03 17:58:10
1789
转载 转:mem
最后一种内存问题是 Stack corruption 和 Stackoverrun。stack overrun 很简单,一般是由于递归函数缺少结束条件导致,使得函数调用过深把 stack 地址用光,比如下面的代码:Void foo(){Foo();}只要在调试器里重现问题,调试器
2011-07-22 12:49:49
2261
原创 使用vc发现的一些问题记录
今天又发现了一个无法得到变量的原因,一并整理如下1,就是最简单,删除pdb重建2,从网上下的一份代码,某个文件总是得不到变量,对比查找发现多了几个pragma设置,注释掉//#ifdef _AFX_MINREBUILD//#pragma component(minrebuild,
2011-07-19 13:31:07
881
原创 记录一些对mfc理解以前比较模糊的东西
对mfc的消息机制很不理解,花了一天时间粗看了下李久进和侯捷的深入浅出又从网上搜了部分,http://www.cppblog.com/nacci/category/1784.html理解和摘抄部分整理如下1,rtti机制,这个就是每个类都定义一个静态变量,里面有父类的这个静态变量
2011-07-14 14:25:00
835
原创 windows gdi相关(摘录) +windows窗口
在处理非WM_PAINT消息时,应用程序获取窗口用户区设备描述表句柄使用GetDC函数,它常常用来对用户的某些动作提供反馈。例如,当用户移动鼠标光标穿越窗口时,在屏幕上画一条线。GetDC函数返回一个显示缓冲区句柄,它可以用于任何GDI输出函数。使用GetDC函数获得显示缓冲区句
2011-07-08 14:11:48
769
原创 iwebbrowser的一些方法
get_FullName获取容器应用程序的文件名,包括绝对目录get_Type 获取网页类型,比如Html typeget_Busy 获取是否正在解析状态get_LocationName 获取title,跟ontitlechange的最后一次一致get_LocationURL 获取网页url,跟ontitlechange的最后一次一致get_Application 获取iwe
2011-06-28 11:07:00
794
转载 VC之美化界面篇(转载)
VC之美化界面篇(转载) 收藏 关键词界面美化 摘要本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础:1. 大致了解MFC框架的基本运作原理;2. 熟悉Windows消息机制,熟悉MFC的消息映射和反射机制;3. 熟悉OOP理论和技术;本文根据笔者多年的开发经验,并结合简单的例子一一展开,希望对读者有所帮助。
2011-06-23 16:33:00
1044
原创 chrome之view之animate
chrome的动画机制 动画首先需要创建一个容器,负责时间调度,这里是AnimationContainer这个类里面使用的是base::RepeatingTimer来开设置settimer,然后回调到run()timer_.Start(min_timer_interval_, this, &AnimationContainer::Run);run(){ Ele
2011-06-22 17:46:00
1443
原创 读fastdelegate和sigslot
分别来自与sourceforge和codeprojectsigslot的运行方式比较容易理解,就是将对象指针和函数指针保存到连表里,然后调用的时候再取出来执行fastdelegate看他的文档看的一头雾水,看完了也没弄清楚作者说的为啥快和快到哪里去了,只是内存消耗确实变少了因为他将所有的虚函数,多重继承等的this指针做了个复杂的取实际地址操作,所以他的一次bind只需要8个字节就够了但是除内存外
2011-06-20 13:30:00
4042
原创 chrome之view
看了点其他东西,结果发现以前看的chrome代码有些忘了,看来写博客确实是好事,能帮助人很容易的回忆起来 chrome的是基于wtl的,他的view类比较庞大,具体的子类又分为native和customnative就是windows的自有空间,比如button,custom的就是directui了,界面里划分出不同的区域,区域显示出类似button的效果以radiobutton为例
2011-06-15 11:52:00
3742
原创 chrome之ipc
上来就被这个复杂的define给搞迷糊了,看了http://www.cnblogs.com/duguguiyu/archive/2008/10/04/1303695.html的解释,在对照就好多了,不过他的介绍里有些错误,而且一些关键点没有写最牛逼的就是自动生成id和挂钩Id了,用mfc的人都知道,自定义消息的时候都要去写um_xx这种定义,然后要写messagemap,再写实现,chro
2011-06-07 14:59:00
5395
转载 关于TLSAlloc() (2011-05-01 00:02:46)转载
标签: tls it 分类: C/Cxx为什么要有TLS?原因在于,进程中的全局变量与函数内定义的静态(static)变 量,是各个线程都可以访问的共享变量。在一个线程修改的内存内容,对所有线程都生效。这是一个优点也是一个缺点。说它是优点,线程的数据交换变得非常快 捷。说它是缺点,一个线程死掉了,其它线程也性命不保; 多个线程访问共享数据,需要昂贵的同步开销,也容易造成同步相关的BUG。 如果需要在一个线程内部的各个函数调用都能访问、但其它线程不能访问的变量(被称为static memory
2011-05-31 16:35:00
1628
原创 libtorrent协议略查
<br />首先发送一串B编码给指定的服务器,这个可以通过设定traker或者dht来指定这个服务器<br />session_handle.add_dht_router(std::make_pair(std::string("bt.teyouqu.com"), 6681));<br />发送内容<br />http://bt.teyouqu.com:2710/announce?info_hash=%8e%8c%da%a1%f1%83%3b%f6qv%f23%eeF%cf%e7dR%bbH&peer_id=
2011-05-20 14:36:00
1161
原创 vs2005调试无法命中断点问题,0x09
<br />突然间某个文件断点失效了,幸好用的svn,还有老点的版本,对比了下,文本方式完全相同也不行,但是二进制下<br />0x09制表符很多地方不一样,也不知道怎么产生出来的,使用编辑-〉高级-〉将制表符替换为空格<br />然后解决,很是奇怪,看来vs2005 bug不少啊,前几天碰到的是utf8乱码也很恶心
2011-05-19 15:31:00
1224
原创 慢读chrome(base)
cryptto 加解密的,太专业json json解析的atexit.cc,顺便可以看一下crt0.c了解下程序的启动和关闭过程程序退出前做动作的,通过超出变量范围时调用析构,执行事先注册在一个栈变量的函数,具体是执行的啥没看过首先其他函数调用RegisterCallback然后退出前具体执行 ProcessCallbacksNow();base_switches.cc一些设置选项怎么用还待查namespace switches {// If the program includes chrome/c
2011-05-18 17:40:00
3073
转载 I18N、L10N、G11N的区别?
<br /><br />I18N--是“Internationalization”的缩写,由于 “Internationalization”单词较长,所以为了书写简便,通常缩写为“I18N”。中间的 18 代表在首字母“I”和尾字母“N”之间省略了 18 个字母。单词“Internationalization”翻译成中文是“国际化”的意思-是使产品或软件具有不同国际市场的普遍适应性,从而无需重新设计就可适应多种语言和文化习俗的过程。真正的国际化要在软件设计和文
2011-05-18 10:13:00
16638
原创 慢读chrome
先从base读,clipboard:设计了多个类型的剪贴板操作函数,只能globalalloc分配数据,不能globalfree,否则其他线程是拿不到这个剪贴板的数据的,具体的globalfree估计是在emptyclipboard上做的,全局只有这么一个剪贴板
2011-05-17 16:32:00
2064
原创 编译chrome
<br />上次编译chrome已经是半年前的事了,那时候也只是为了用libcef,编译起来哪个痛苦啊<br />最近电脑更新换代了,重新下了编译下看看,顺便再学习下google的代码<br />首先还是下载deptools,悲剧的是被墙了,话说google你为啥非要跟天朝政府做对呢,害的我等屁民上个技术网站都没法子<br />百度这屁货又不给力,能搜到的只有广告<br />下了deptools后用gclient更新,又是漫长的下载,断断续续用了好几天,终于下完了,编译<br />一大堆错误,查了下是因为好
2011-05-16 21:28:00
2852
原创 转:VC非模态对话框创建和销毁
<br />非模态对话框相对于模态对话框,他的创建和销毁过程和模态对话框有一定的区别 <br /><br />先看一下MSDN的原文:<br /><br />When you implement a modeless dialog box, always override the OnCancel member function and call DestroyWindow from within it. Don’t call
2011-05-13 16:09:00
762
转载 转:mfc窗口的销毁
<br />一段很好的文章:(作者:闻怡洋) <br /><br /> 一个MFC窗口对象包括两方面的内容:一是窗口对象封装的窗口,即存放在m_hWnd成员中的HWND(窗口句柄),二是窗口对象本身是一个C++对象。要删除一个MFC窗口对象,应该先删除窗口对象封装的窗口,然后删除窗口对象本身。 <br /><br /> 删除窗口最直接方法是调用CWnd::DestroyWindow或::DestroyWindow,前者封装了后者的功能。前者不仅会调用后者,而且会使成员m_hWnd保存的HWND无效(NU
2011-05-13 16:07:00
665
原创 读windows核心编程
记录下几个以前不是很清楚的东西1、那么,系统在创建新的线程时,是如何知道要分配这个数据块的呢?答案是它并不知道。系统并不知道应用程序是用C/C++来写的,不知道你调用的函数并非天生就是线程安全的。保证线程安全是程序员的责任。创建新线程时,一定不要调用操作系统的CreateThread函数。相反,必须调用C/C++运行库函数_beginthreadex:在多线程环境中会出问题的C/C++运行库变量和函数有errno,_doserrno,strtok,_wcstok,strerror,_stre
2011-05-09 16:54:00
842
原创 win7进程权限管理
<br />一般习惯于用manifest来要求程序得到管理员权限,但是很多情况下,是不需要这个权限的,<br />win7又是每次必问的,所以这样会相当的烦啊,下面是摘抄手动提权的文章,摘自windows核心编程,可以在需要的时候创建出管理员权限的进程去做某些事情.<br />手动提升进程的权限<br />如果你仔细阅读过本章前面对CreateProcess函数的描述,肯定已经注意到它没有专门提供什么<br />标记或参数来指定对这种权限提升的需求。相反,你需要调用的是ShellExecuteEx函
2011-05-09 15:46:00
3454
转载 转贴 详解任务管理器
详解任务管理器樱木花盗 发表于 2010-12-1 16:05:36 ㈠、概述及菜单 任务管理器提供正在您的计算上运行的程序和进程的相关信息。也显示最常用的度量进程性能的单位。使用任务管理器可以监视计算机性能的关键指示器。可以查看正在运行的程序的状态,并终止已停止响应的程序。也可以使用多达 15个参数评估正在运行的进程的活动,查看反映 CPU 和内存使用情况的图形和数据。 此外,如果与网络连接,则可以查看网络状态,了解网络的运行情况。 如果有多个用户连接到您的计算机,您可以看到谁在连接
2011-05-08 22:10:00
4892
原创 breakpad
因为自己也用minidump捕获异常并回发给自己,但是确实有部分捕捉不到,现在看了breakpad,他也确实多实现了两个c++异常的捕获,暂时还没移植到自己的代码中,也无从知道是否就能全部捕获,不过想来google这种巨无霸,做事情应该很完善看代码,发现breakpad写的挺复杂,远比自己的SetUnhandledExceptionFilter,minidump复杂多了,就算进程内捕获,他都是额外开了线程来处理,更何况还有更复杂的cs模式,他自己的文档里说是为了避免破坏崩溃堆栈,目前自己的知识量不够,还不太
2011-05-04 22:17:00
2587
转载 转:windows下Critical Section、Event、Mutex、Semaphores区别 收
引用自:http://hi.baidu.com/blackfox1983/blog/item/23af4b51307d8b2142a75b9e.html临界区(Critical Section) 保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目
2011-05-04 22:17:00
588
转载 【转】同步机制及windows同步函数的使用
<br /> <br />【转】同步机制及windows同步函数的使用<br />作者:simahao<br />原文链接:http://blog.csdn.net/simahao/archive/2005/07/15/425420.aspx<br /> <br />本篇文章适合比较熟悉多线程并且想学习线程同步的读者。<br />最近由于使用多线程,不可避免的要用到线程之间的同步,对一些常用的windows 中同步函数和机制有了一些初步的了解,并且写了一些小例子来验证,当然其中难免有错误和疏漏之处,希望高手
2011-05-03 17:09:00
439
原创 重定义mfc函数入口点
extern "C" int WinMainCRTStartup(void);int MymainCRTStartup () { return WinMainCRTStartup();}然后修改工程设置里的入口点
2011-05-03 16:52:00
1965
转载 转:InitializeCriticalSectionAndSpinCount()
<br />看jemalloc看到这个函数,不解,搜了下并转到这里<br /> <br /> 这个api名字够长,我喜欢! 实际上对 CRITICAL_SECTION 的操作非常轻量,为什么还要加上旋转锁的动作呢?其实这个函数在单cpu的电脑上是不起作用的,只有当电脑上存在不止一个cpu,或者一个cpu但多核的时候,才管用。 如果临界区用来保护的操作耗时非常短暂,比如就是保护一个referencecounter,或者某一个flag,那么几个时钟周期以后就会离开临界区。可是当这个thread还没有离开临界
2011-04-27 09:36:00
1243
转载 转:Windows注册表HIVE文件格式解析
<br />Windows注册表HIVE文件格式解析<br />文章作者:fahrenheit <br />引言 <br /><br /> 相信大家对Windows系统的注册表(registry)一定都不陌生了,我们可以用系统提供的注册表编辑器(regedit)来访问和修改注册表中的数据。直观的讲,注册表呈现出来的是图1所示的形式,它由根键(rootkey)、子键(subkey)、键值(value)和数据(data)组成。数据之间有类型的分别,常见的有:REG_SZ、字符串型,REG_BINA
2011-04-25 16:30:00
2065
1
原创 无聊杂记
http://hi.baidu.com/shineastdh/blog/item/8808ad1b708df7d8ad6e75fa.htmlAKLT反键盘记录及截屏测试Anti-Keylogger Tester (AKLT) 是用来测试安全软件防御键盘记录的测试工具。最新版的AKLT V3.0 提供了7种不同的方式,来监视和记录键盘输入。根据Kaspersky Lab 的文章,目前,流行的键盘记录方式有三种:Global Hook (66%)、Cyclical polling(29%)、
2011-04-25 16:28:00
1352
转载 转载的svn管理原则
<br />存储库<br />┠项目名<br />┃├trunk:主版本<br />┃├branches:分支版本(独立版本)<br />┃└tags:标记版本,比如发行版v1.0/v2.0等等<br />3、SVN库的管理原则:<br />1、项目负责人和版本管理员负责架构项目目录结构,包括配置文件、第三方JAR文档<br />2、项目负责人分配开发人员目录权限,由版本管理员负责实施,权限分配粒度要细<br />3、trunk,tags,branches,项目负责人、协同版
2011-04-25 16:27:00
710
转载 转载 CString 操作指南
<br />CString 操作指南<br /><br /><br />原著:Joseph M. Newcomer<br /><br /> 翻译:littleloach<br />原文出处:codeproject:CString Management<br /><br /><br /> 通过阅读本文你可以学习如何有效地使用 CString。<br /><br /> CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多
2011-04-24 10:02:00
675
原创 mfc下cstring的部分用法:lpctstr 和getbuffer
<br />cstring是mfc里面相当好用的一个类,但是对与转换为char *的用法,很多人就不怎么明白了,很多人是getbuffer(),lpctstr混用的<br />但是又不甚明了里面的区别,简单介绍下,留个记录,防止以后忘掉了<br />cstring对效率的要求,导致了这个类在设计的时候使用了哪个lazy evaluation,多个对象互相赋值的时候,实际保存内容只有一份,使用引用计数,只有在某个对象写操作的时候,才会发生实质的创建内存+拷贝工作<br />以下是两个函数的具体定义:<br /
2011-04-23 23:19:00
2447
原创 class下的new delete
<br />class test<br />{<br />public:<br /> test(){printf("constructor/n");};<br /> ~test() {printf("destuctor/n");}<br />};<br /><br />void main()<br />{<br /> test *t = new test[12];<br /> delete t;<br /><br />}<br /><br />
2011-04-22 13:43:00
1456
原创 new delete malloc free
<br />最近看了本书,effictive c++,里面讲了new ,说delete 数组的时候一定要加[],说不加编译器就不知道这是个数组<br />感觉有点莫名其妙<br />malloc free这一套c函数,为啥就没有free []的用法呢?暂时理解不了,等以后有时间再来看<br /> <br />写了段小代码<br /> char *p = new char[12];<br /> strcpy(p,"hello");<br /> delete []p;<br />
2011-04-22 13:01:00
646
转载 COM Hook原理
<br />掌握C++对象模型底层知识的人都知道,C++利用虚函数的机制来实现运行期的多态。<br />例如一个类申明如下:<br />class A<br />{<br />public:<br />A(){}<br />~A(){}<br /> <br />virtual void f1(){ printf("Founction f1 called"); }<br />virtual void f2(){ printf("Founction f2 called"); }<br />virtual
2011-04-15 21:48:00
1017
原创 sscanf的使用
<br />读取数字还好说,但是读取字符串的时候,比如<br />特殊lsd,法律的沙拉,511,范德萨来说<br />的时候,就需要设定截止字符<br />sscanf(%s,%s,%d")这种就是错误的了<br />正确的做法为<br />sscanf(tmpbuf,"%[^,],%[^,],%d,%[^,])
2011-04-13 14:14:00
420
原创 activex去除IE警告框的几个步骤
近期做了个activex,几个点记录下,留作纪念1,集成iobjectsafety接口2,修改注册表,加入clsid和允许的域名 RegSetString(HKEY_CURRENT_USER,"Software//Microsoft//Windows//CurrentVersion//Ext//Stats//{6E9615F1-9BE7-44f3-8C85-C576F895DA3B}//iexplore//AllowedDomains//teyouqu","Company","xxxxx Mo
2011-04-12 14:44:00
1204
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人