C/C++/C#
文章平均质量分 62
eagleatustb
学习永远没有终点
展开
-
UTF编码转换实现
UTF-8;UTF-16;UTF-32;编码规则以及文档都可以从wiki上查的到.这里就不说了.微软的MultiByteToWideChar函数组是可以快速实现,但这里为理解实现原理,参考一些成熟的源码。 直接上代码. 这是tinyXML中UTF32转UTF8的代码:void ConvertUTF32ToUTF8( unsigned long input, char* outpu转载 2013-04-29 10:38:42 · 1556 阅读 · 0 评论 -
《Windows核心编程》读书笔记——作业
第5章:作业1. 为了把一组进程当做一个单独的组来处理,windows提供了一个作业(job)内核对象,它允许我们将进程组合在一起并创建一个”沙箱“来限制进程能够做什么。最好把作业对象想象成一个进程容器。理解:从这里我们要注意关键,作业是管理进程集合的容器,所谓管理主要就是对进程行为加以限制!2. 如果进程已与一个作业关联,就无法将当前进程或者它的任何子进程从作业中去除,这个安全特性可以确原创 2012-10-26 18:09:44 · 1030 阅读 · 0 评论 -
《COM技术内幕》读书笔记——第5章 动态连接
前置课程是PE文件结构和DLL动态连接技术,如果你不了解PE文件结构(这在这章不算很重要,但这个是很基本很基本的内容,对理解编译加载原理以及内存结构有很大帮助),请参考PE文件格式官方文档;如果你还没有写过DLL,请先参考《Windows核心编程》第19,20章。 回归正题目,这里要做的是一个COM的组件服务器——使用DLL的形式,所以有别于一般的DLL。需要实现注册,卸载,初始化,原创 2012-12-28 15:33:03 · 851 阅读 · 0 评论 -
《COM技术内幕》读书笔记——第10章 EXE中的服务器 代码调试
也许是进度太快,前面的章节没有很好的把握,我在读第10章的内容的时候,感觉有很多知识点还没有清楚,而且这章结构组织没之前的清楚,甚至可以说有点混乱。再次回顾可以加深之前内容的掌握,在这里有一个关键的点就是——完完整整的把课本的代码走一遍,理解怎么写为什么写这些代码。 对于本章的代码,也是老问题了,此书作者可没有花时间在讲解代码调试上。由于年代久远,按书上说的nmake -f make原创 2013-01-07 17:07:11 · 880 阅读 · 0 评论 -
SGI STL 源码解读之Allocator
为了进一步了解Allocator的运作原理,我们以下面的使用作为例子,解读其实现细节。 std::allocatorint>MyAll; MyAll.allocate(10); 以上代码调用SGI STL的allocator,分配10个int型的空间。下面的分析使用SGISTL源代码allocator.cpp,并加上我的理解注释,建议参考侯捷的书做了解。但我目前原创 2012-10-08 15:03:58 · 3705 阅读 · 2 评论 -
进程名与进程号的对应关系获取
最近遇到一些进程相关的内容,从而查找相关资料,引出个Tool Help Functions系列的API学习。 完整资料在:http://msdn.microsoft.com/en-us/library/windows/desktop/ms686832(v=vs.85).aspx#feedback 本文分三部分:1. 问题描述 2. 使用到的关键API解析 3. 引申To原创 2012-07-12 14:40:09 · 2785 阅读 · 0 评论 -
总结文件读写的函数
最近工作中常用到,需要总结文件读写的函数原创 2012-06-14 11:05:11 · 603 阅读 · 0 评论 -
《COM技术内幕》读书笔记——第2章 COM接口的实现
以下为此章知识点罗列,没有整理和引申。 1. COM接口在C++中是用纯属抽象基类实现的,一个COM组件可以提供多个接口,一个C++类可以使用多继承来实现一个可以提供多个接口的组件。 2. 用__stdcall标记的函数将使用标准的调用约定,即这些函数将在返回到调用者之间将参数从栈中删除。在常规的C/C++调用约定中,栈的清理工作则是由调用者完成的。标准调用约定名原创 2012-12-26 13:34:03 · 713 阅读 · 0 评论 -
_DllMain@12 already defined in CMPNT.obj 错误说明
今天在VS2008中使用默认选项创建DLL工程,把《COM技术内幕》书上第7章的例子搬过来编译,在连接的时候遇到一个问题:mfcs90ud.lib(dllmodul.obj) : error LNK2005:_DllMain@12 already defined in CMPNT.obj 原来按VS2008默认方式创建的DLL工程带有像class CTDllApp : public原创 2012-12-27 17:25:49 · 1122 阅读 · 0 评论 -
对《COM技术内幕》第10章的不满意
第10章是COM进程间通信和远程通信的关键章节,本来按理来说,应该说清楚两个进程是怎么样通信的,讲到最终的API使用上面去,甚至分析模拟API的原理代码,才是我理解的所谓“技术内幕”,但很失望,作者没有这么做,而是避而不谈。 “虽然读者不需要知道LPC的细节,但知道如何用IDL,来描述自己的接口却是必不可少的。” "此时读者可能还是想着自己手工来编写有关的代码,而不原创 2013-01-09 11:01:59 · 1296 阅读 · 0 评论 -
windows函数钩子实现
最近在看《windows图形编程》,其中提到一些比较实用的windows系统的文件特性,总结一下,把代码也贴出来作参考。 原文参考P27,在这里只把代码写出来,代码经过我的初步修改,可以直接运行。 要求要了解PE文件结构,熟悉基本的windowsAPI。下面程序把原来需要调用user32.dll中的MessageBoxA函数用自己实现的MyMessageBox代替,也就原创 2012-07-06 13:22:24 · 1042 阅读 · 0 评论 -
利用ACE建立连接
最近工作中需要用到ACE去做TCP的数据传输工作,看了《ACE程序员指南》这本书,有点收获。ACE把原来烦琐的socket编程巧妙组合在一起并管理起来,提供面向对象的操作,使程序员(当然是熟悉了socket编程原理并有一定socket基础的)可以忽略中间繁琐的细节步骤,减少出错,提高效率。对于一些网上的评论说ACE把简单的socket编程复杂化,个人认为初学者大可不必理会,因为那都是没用过面向对象原创 2012-08-21 11:55:50 · 1026 阅读 · 0 评论 -
整数四则混合混算的表达式计算
本文实现整数的四则混合混算。比如:输入(5+8*4+7)*9-3*(13+2*6),返回计算结果为321。 思路:正向扫描表达式,使用两个栈分别存储整数和符号,有括号的先计算括号中的值。遇到乘除法先计算。经过以上计算后得到最后的式子为只有加减法的无括号式子。再计算最后结果。 流程描述:1. 扫描字符t。2. 若为’\0’,跳到4;若为’*/+)’,入符号原创 2012-10-31 14:01:04 · 1483 阅读 · 0 评论 -
《COM技术内幕》读书笔记——第1章 组件
社会需求是推动人进步的动力,这不,由于工件需要,我需要学习COM的知识以完成手头的工作内容。软件行业是一个不断学习不断进步的行业,学习方法至关重要。 第一章是一个基本的介绍,基本上围绕为什么用COM,COM是什么而不是什么这几个中心来展开的,目的就是说明:作者写这书是有道理的!对于我来说,不需要看这部分内容,我的学习原因用不着作者去指引,很快在实践中就能出真知,哈哈。原创 2012-12-26 11:07:17 · 638 阅读 · 0 评论 -
《COM技术内幕》读书笔记——第3章 QueryInterface函数
所有COM的接口都需要继承一个接口——IUnknown,接口的定义在UNKNWN.H文件中,我所使用的7.0库版本中所带的定义为: IUnknown { public: BEGIN_INTERFACE virtual HRESULT STDMETHODCALLTYPE QueryInterface(原创 2012-12-26 16:08:22 · 810 阅读 · 0 评论 -
《COM技术内幕》读书笔记——第4章 引用计数
本章介绍COM必须实现的IUnknow接口的两个计数函数——AddRef和Release,简单来说就是智能指针类似的功能。内存分配在组件类中进行,每当组件类的指针外传的时候增加引用,而当传出去的指针使用完毕,减少引用计数。当引用计数减少到0时释放内存。 需要注意到通用的几个函数实现里都应该加上AddRef,如QueryInterface,CreateInstance。书中强调对象的生原创 2012-12-28 15:08:34 · 731 阅读 · 0 评论 -
《COM技术内幕》读书笔记——第6章
HRESULT值的使用比典型的布尔值要麻烦一点,当然也更能提供一些额外信息:成功代码有多个,失败的代码也有多个;失败代码可能会发生变化。 错误代码的直接传递会造成一些客户不识别错误代码的情况,例子在书上85页有一个有力的说明,可以参考。 对于自定义的HRSULT的一些一般性规:不要将0x0000及0x01FF范围内的值作为返回代码,因为这些值是为COM所定义的FACIL原创 2013-01-04 11:06:46 · 1291 阅读 · 0 评论 -
SGI STL 源码解读之 Iterator
引言引用侯捷在《STL源码剖析》中的话——STL的中心思想中于:将数据容器(contrainers)和算法(algorithms)分开,彼此独立设计,最后再以一贴胶着剂将它们撮合在一起。而Iterator正是扮演了这个撮合的关键角色。从两本权威资料《C++标准程序库》和《STL源码剖析》的解读,以及SGI中Iterator的源码实现来看,我觉得这个分离是在相当多的前提下面进行的。在这方面,标准原创 2012-10-17 16:35:20 · 1403 阅读 · 0 评论 -
Heap functions
对于windows下面堆的内存分配和管理,无论C++标准库中的new还是C标准库中的malloc等内存处理函数,底层是通过API Heap functions来实现的。如果需要单独在windows平台上面做高效率的内存管理,需要深入了解这些堆内存分配函数。这里引用一篇MSDN上面的文档资料:http://msdn.microsoft.com/en-us/library/windows/deskto转载 2012-10-12 14:36:33 · 826 阅读 · 1 评论 -
取得本地IP
对于网络方面的知识需要加强。 1. 取得本地机器名和IP: string tmpLocalIP ; char tmpName[256]; if(gethostname(tmpName,sizeof(tmpName))!=0) { ATLTRACE(_T("gethostbyname() error!!\n")); log_.write(L"can't get原创 2012-09-13 13:52:38 · 1038 阅读 · 0 评论 -
SGI STL源码解读之 string
花了差不多一天时间,把SGI STL的string实现对着《C++标准程序库》看完。现在稍总结一下。 string也算是众多容器的一种,遵守容器设计接口,是一个随机读取容器(和vector差不多,就是内存结构更简单一点),自身迭代器设计和vector相似,都是使用传进来的类型的指针做迭代操作运算。string的数据直接在allocator里面保存,这个是更简单直接了;vector是a原创 2012-10-18 15:33:59 · 1162 阅读 · 0 评论 -
三种的allocator实现源代码的对比
最近看空间配置器的内容,把ACE的ACE_Allocator类实现,SGI的allocator类实现和MS的allocator实现也参考了侯捷先生的《STL源码剖析》,有不少收获。 我听说是有说明STL中allocator实现标准的文件,但我没有找到,据我实验推测,标准allocator需要实现rebind,allocate,deallocate,max_size和构造及析构函数一共原创 2012-09-29 11:40:14 · 4310 阅读 · 1 评论 -
base64编码函数
闲来无事,写个base64编码原创 2014-07-25 12:12:13 · 3012 阅读 · 0 评论 -
C++实现一个简单的双线程MVC框架
MVC框架实现,原理如下:两个线程一个控制线程,一个视图使用线程(tyg)原创 2014-06-19 12:01:29 · 3188 阅读 · 0 评论 -
重载new和delete来防止c++工程中内存泄漏
转一个重载new,delete内存2012-11-24 21:28 ⁄ 工业·编程 ⁄ 共 3612字 ⁄ 字号 小 中 大 ⁄ 暂无评论 在C/C++中指针给编码带来的极大的方便,但是同时由于分配的指针需要编程人员自行释放内存,因此容易造成内存泄漏,C++中自带的new/delete本身没有提供内存泄漏检测的功能,不过我们可以重载这两个函数来追踪内存转载 2014-09-17 09:59:00 · 1591 阅读 · 0 评论 -
在程序出错时创建CrashDump文件
最近在一个后台程序调试的时候,经常死掉,尝试过写log,但还是很难定位。 想到了使用dumpfile来做保存崩溃信息方便调试定位错误。因为debug版本与release版本的优化差异,在release版本仍然难以定位到代码,只有在debug版本出现错误的时候,可以定位到代码。目前只有这种方法了,结合记录的log应该会有效。#include #include // 创原创 2013-06-26 15:45:43 · 2857 阅读 · 0 评论 -
多线程时使用shared_from_this的一个注意问题
发生场景:类中带线程成员变量,线程用来做异步实际操作原创 2014-11-25 16:34:18 · 2977 阅读 · 2 评论 -
利用模板和成员函数指针进行业务逻辑分离一例
今天碰到一个问题,需要把业务实现逻辑与另一个类的设计分离;试了好几次都没有成功,最后在同事的帮忙下改好了,记录一下。#include template class A{public: typedef void (T::*func)(); A(){}; ~A(){}; void init(T *t,func f){(t->*f)();};};class B{publi原创 2014-02-10 16:17:40 · 988 阅读 · 0 评论 -
字符串的左旋转最佳解法
题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。思路:其实这种题目很好解。直接对每个位置迭代求数据来源位置就可以了。有另外一些解法,比如交换法,双反转法,递归法,对于解此题目没什么高效的解法。我认为以下解法完原创 2012-10-19 15:12:36 · 1570 阅读 · 3 评论 -
如何在VS2008下调试SGI STL源代码
相信 很多C++的程序员都看过侯捷先生写的《STL源码剖析》,即使没看过,也有所闻。正如侯先生开篇所说:源码之前了无秘密。但有很多人只是看了这本书,没有实践跟进去了解具体的运行机理,没有实践的理论,总是不那么深刻的。本文一步一步教你在本机上把SGI STL编译并调试。废话少说,开始。 0. 前置条件:windowsXP或win7(我本机是win7,但说明里明显是说支持xp的),已经安装原创 2012-09-28 11:07:43 · 5269 阅读 · 8 评论 -
ACE技术使用细节
最近在使用ACE做网络编程工作,写一些在工作中学到的小技巧与深得,循序渐进。1. 在ACE中使用new产生对象的时候,如果无法分配内存直接返回错误,最好使用ACE里已经定义的宏ACE_NEW_RETURN来做内存分配的保护; 代码在OS_Memory.h# define ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL) \ do { P原创 2012-09-11 18:09:06 · 1143 阅读 · 0 评论 -
PDB Files: What Every Developer Must Know
Reference: http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/11/pdb-files-what-every-developer-must-know.aspxAuthor: John Robbins Most developers realize that PDB files are something转载 2012-06-18 09:41:24 · 1013 阅读 · 0 评论 -
在 console mode 中使用 C/C++ 編譯器
侯捷 1999.04.08我總是鼓勵 C/C++ 的學習者,在剛接觸這個程式語言的時候,先以 console mode(DOS-like)程式為目標。換言之,不要一開始就想寫 GUI 程式、想開視窗、想有眩目亮麗的畫面 -- 那只是未走先飛,揠苗助長罷了。所謂 console 程式,就是文字模式的程式,我們可以在其中好好把 C/C++ 的語言根基練好,而不會分心於其他暫無必转载 2012-11-07 20:27:28 · 1250 阅读 · 0 评论 -
《windows图形编程》读书笔记——第2章
基于win2k写的,又是一本古老的书,甚至书上好多例子使用的库已经改头换面了,调试也没法做了。不过,在市面上还真找不到其他深入讲述系统图形内部原理的书,真是鸡肋。书中内容很多,而且相对抽象,学习了差不多一个月,只学了几章,苦于很多东西没法调试——书上讲的和系统已经搭配不上了。现在只是把一些重点梳理一下,打下一点理论基础。 操作系统的图形和多媒体系统是分层的系统,最上面的应用程序通过W原创 2013-01-22 11:29:17 · 1483 阅读 · 0 评论 -
《Windows图形编程》读书笔记——第3章 GDI/DirectDraw内部数据结构
本章将会提示GDI句柄的每个细节和这些GDI句柄背后重要的数据结构,你也许对GDI数据结构的细节不感兴趣,但是理解GDI/DirectDraw的内部设计会使你成为知识渊博的程序员。 对于GDI来说,常见的对象包括设备上下文、逻辑画笔、逻辑画刷、逻辑调色板、设备相关位图。因此所有的设备上下文对象都是设备上下文类的实例,所有逻辑调色板是逻辑调色板类的实例。Win32API中的对象可原创 2013-01-22 18:06:51 · 1492 阅读 · 0 评论 -
10,11,12月学习计划
基本语言: 1. 加强C++语法的学习使用,以Thinking in C++的技术中心扩展开来学习,注意后面习题的解答,提高语言运用能力。 2. 对一些未用过的特性挖掘其使用价值和场景。 数据结构与算法: 1. 标准库:( vector, list, allocator 已经掌握 )SGI STL源码中红黑树和hashmap难点掌握,原创 2012-10-11 14:06:05 · 1591 阅读 · 0 评论 -
更改windows7桌面背景
有人问到如何更改桌面背景,查了下MSDN,使用SystemParametersInfo就可以做到。 参考MSDN连接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724947(v=vs.85).aspx#Desktop#include #include #pragma comment(lib, "use原创 2013-07-02 17:45:52 · 1242 阅读 · 0 评论 -
关于PE文件中的校验和
最近研究PE文件结构,每看一次文档都有新的收获,证明有很多东西还是理解得不深刻。今天做了关于checksum校验和的实验,确认了在应用层,系统加载程序的时候,CreateProcess不会对exe做校验和检验,LoadLibrary不会对dll做检验和检验。按文档说,这些都是不需要检验的,没有问题,另外一个问题就是要确认驱动程序加载的时候需要检验校验和。下面内容摘自PECOFF-v8原创 2013-07-12 18:41:51 · 3305 阅读 · 1 评论 -
sigslot的动态模板版本
拿到一个简单好用的库,但是里面使用了以前不支持动态模板的做法,写了很多重复代码。我用动态模板改进了一下,减少代码量。原代码地址:http://sigslot.sourceforge.net/// sigslot.h: Signal/Slot classes// // Written by Sarah Thompson (sarah@telergy.com) 2002.//// Li原创 2016-07-08 18:37:30 · 771 阅读 · 0 评论 -
无聊写个快排
又周末,无聊又写写快排~void QSort(int array[],int p,int q){ int begin = p; int end = q; int mid_value =array[begin]; if (begin>=end) { return; } while (begin<end) { while((begin=mid_value)) {原创 2013-03-22 23:19:40 · 875 阅读 · 0 评论