- 博客(78)
- 资源 (13)
- 收藏
- 关注
原创 防止窗体显示时获取输入焦点
MFC 的 Dialog 创建时有时会被设为前台窗口,导致 ShowWindow(SW_SHOWNOACTIVATE); 无效,因此只能在创建前 GetForegroundWindow(); 窗体创建成功以后再 SetForegroundWindow(); ,然后 ShowWindow(SW_SHOWNOACTIVATE); 就有用了。
2009-08-06 09:20:00 667
翻译 InternetOpenUrl 函数 ( MSDN 翻译 )
InternetOpenUrl函数(jadedrip 翻译) 通过一个完整的FTP,Gopher或HTTP网址打开一个资源。 HINTERNET InternetOpenUrl (__in HINTERNET hInternet ,__in LPCTSTR lpszUrl ,__in LPCTSTR lpszHeaders ,__in DWORD值dwHeadersLen
2009-06-19 16:32:00 3998
原创 C++、数据库、模板、操作符重载、乱想
正在考虑如果封装数据库操作,以便隐藏更多数据库的细节,让不懂 SQL 的开发者可以用 C++ 来描述他所要做的。 使用模板、操作符重载,也许我们能写出 这样的代码: struct Item { int id; int value; int useless; }; Database db("database_name"); db.Open( "ro
2008-07-02 13:37:00 783
转载 Scarborough Fair 天籁
《Scarborough Fair》诗经体译词如下(英中对照) 诗经体的歌词 英文原歌词 《斯卡博罗集市》 Scarborough Fair问尔所之,是否如适。 Are you going to Scarborough Fair?蕙兰芫荽,郁郁香芷。 Parsel
2008-04-15 10:06:00 6561 3
原创 基于状态机思想的 Xml SAX解析器
学习状态机的练习之作,使用 switch 的方式。 不多说,看代码:/// 节点开始 class fsm_xml; class fsm_attrib { // 获取属性值 public: fsm_attrib() { _state=0; } void init(){ _state=0; _attrname.clear(); _attrvalue.clear(); } const ws
2008-04-07 09:19:00 984
原创 Lockfree 习作:最多保存56个对象的简单容器
/// 最多可以存放 56 个数值的容器 template class SafeValuePool { public: SafeValuePool() : _mark(0) {} uint8 lock() { for( ;; ){ for( int i=0; i assert( (_mark & 0xFFFFFFFFFFFFFF00LL)== 0xFFFFFFFFFFFFF
2008-03-17 14:09:00 779
原创 Lockfree 程序中内存释放的另类方法
C++ 的 Lockfree 程序中的内存释放问题是个很大的难点,甚至有些时候被认为是无法解决的,除非C++改变。这里提出一个比较另类的解决方案,希望能起到抛砖引玉的作用。一个对象安全删除的难点在于不知道有多少线程正在访问它,因此一个线程很难确定自己正在读的对象没有被其他线程删除,这里我使用逆向思维的办法来解决这个问题。对于一个 Lockfree 容器,线程访问时,进行注册,将一个Lockfr
2008-03-16 21:57:00 1176 2
原创 C++ 中 inline 的处理
首先声明,我使用的是 Visual Studio 2008. 对其它编译器是否如此不做保证。1. inline 关键字写在声明和实现里 是一样的。2. inline 函数的实现应该写在头文件中,除非只在当前的c文件中使用。(由于没有函数实体,因此连接器是找不到它的)3. inline 函数传入的参数和普通参数规则相同,也就是说,如果传入一个对象,这个对象会被复制(复制构造函数会被调用)。4.
2008-03-13 14:52:00 643
原创 无锁(lock-free)队列的一个简单实现
作为 无锁的 ( lock-free ) 线程安全算法 的一个习作吧。思想、算法十分简单。#ifdef WIN32 inline void sleep( uint32 mil ) { Sleep( mil ); } inline bool CAS(void* pDest, uint32 cmp, uint32 xchg){ return Interloc
2008-03-06 14:18:00 3096 5
原创 C++ 模板类型推导过程中的隐式类型转换
在一篇 《CUJ:高效使用标准库:显式函数模板参数申明与STL 》中发现了这么一端话: 基于全面,需要指出,对我们的例子的自动参数推导中,左值到右值的转换不是在推导出模板参数前所使用的唯一一个隐式类型转换。 在决定模板参数类型前,编译器执行下列隐式类型转换: 左值变换 修饰字转换 派生类到基类的转换 见《C++ Primer》([注2]
2008-02-25 10:40:00 3197
原创 胡思乱想 C++ 模板
突然有个想法,在这里记录下来。C++ 委员会的工作人员正在给C++的模板添加更多特性,那么干嘛不直接把模板直接做成可编程的?直接支持 For 循环等等编程能力,而不用使用一大堆偏特化之类的技巧来完成本来很简单的工作(比如循环)。比如这样的代码:templatevoid func( T );templatevoid func( T ){}t
2008-01-31 09:44:00 758
原创 bjam 使用点滴(连接目录)
设置连接库的查询目录,是使用 exe 【工程名】 : 【源文件列表】 : $(includes) : $(libpath) ;
2008-01-23 08:56:00 1374 2
原创 也谈构建自己的标准流缓冲 【操作Pipe的流缓冲】
研究了半天总算有了一点概念。下面是 basic_streambuf 里和缓冲区相关的几个成员函数。对于输入缓冲区:eback() : 指向输入缓冲起始的位置gptr() : 返回指向下一个读取元素所在的位置egptr() : 返回指向最后一个可读元素(注意,这个指向的不是你创建的缓冲区的结尾)// 对于输出缓冲区pbase(), 指向输出缓冲的起始位置pptr(), 指向下一个可写的位
2007-12-30 11:49:00 891 1
原创 PlaySound 播放资源时的非法操作
用 Windows API PlaySound 企图播放 资源文件里的 Wave 文件的时候,发现第二遍播放没有声音,于是写了段测试代码:for( int i=0; i PlaySound( MAKEINTRESOURCE(IDR_WAVE1), NULL, SND_RESOURCE | SND_SYNC | SND_NODEFAULT ); 然后就很意外的发现执行第二遍的时候,P
2007-12-13 15:34:00 1602
原创 使用 dbghelp.dll 进行 Release 除虫
参考: http://blog.csdn.net/ArCoolGG/archive/2007/04/05/1553027.aspx 首先,写一个 异常处理函数。std::ostream& operator { // return os }// 这个处理函数调用 Nick 的 minidump 创建 dmp 文件。#include "minidump.h"LO
2007-10-16 15:04:00 3335
原创 bjam 使用备忘录
编译静态库的时候,在相关 jam 文件中,添加如下代码。# 默认编译配置(默认编译4种最常用的库类型) default-build = debug release multi static ; if [ os.name ] = NT { default-build += static shared ;
2007-10-11 16:20:00 1763
原创 解析 Boost 库的文件名
Boost 库编译的 Lib 文件按下面的规则组合文件名:BOOST_LIB_PREFIX + BOOST_LIB_NAME + "_" + BOOST_LIB_TOOLSET + BOOST_LIB_THREAD_OPT + BOOST_LIB_RT_OPT + "-" + BOOST_LIB_VERSION这些定义为:BOOST_LIB_PREFIX: 静态库为 "lib"
2007-08-21 09:59:00 1568
原创 无锁的 ( lock-free ) 线程安全算法
友情提示:对 Lock-free 算法没概念的朋友,请先看下面的参考。算法描述Lock-free 算法的基础是 CAS (Compareand-Swap) 原子操作。当某个地址的原始值等于某个比较值时,把值改成新值,无论有否修改,返回这个地址的原始值。目前的cpu 支持最多64位的CAS。并且指针 p 必须对齐。 注:原子操作指一个cpu时钟周期内就可以完成的操作,不会被其他线程干扰。
2007-08-08 14:36:00 15563 3
原创 神秘的 Allocator
先看看 std::vector 的声明template class Type, class Allocator = allocatorType> >class vector 这个 allocator 一般我们很少用到,这个 allocatior 完成了分配内存的工作,对于小内存,它使用了线程池来优化效率。比较具体的介绍可以参考 http://www.stlchina.org/twik
2007-08-07 15:25:00 2073
原创 bjam 初接触
最近正在试用 bjam 来编译我的工程,网上到处找不到中文资料,手册又看的迷惑,连闷带猜的研究了半天,总算能编译我的工程了,写一点心得。如果你使用过 boost 库,也许会对bjam的强大功能有一些认识,bjam是专门为boost库设计的make工具,因此功能超强(其实我觉得过强了,毕竟强大的另一半就是复杂)。 它的一些基础知识可以参考 Jam 使用说明 、Bjam简明教程 ,如果打算拜读官方
2007-08-02 12:02:00 22535
转载 高质量C++/C编程指南
摘录自:http://man.chinaunix.net/develop/c&c++/c/c.htm 高质量C++/C编程指南 文件状态 [ ] 草稿文件 [√] 正式文件
2007-07-17 09:01:00 1933
原创 PWLIB 中的运行期类创建器 PFactory
PFactory 简介使用键名在运行期创建指定类型的类实例。PFactory 的定义template class _Abstract_T, typename _Key_T = PString>class PFactory 假设有一个基类 MyAbstractClass,它的派生类为 MySolidClassclass MySolidClass : public
2007-06-08 16:48:00 1059 1
原创 VC 2005 的IDE宏 - 创建 C++ 头文件的防重包含宏定义
为了防止 C++ 头文件 被重复包含,需要在头文件中加入防止防重包含的宏定义,这个IDE宏帮助完成这个工作。在头文件里插入如下代码的宏#ifndef __FILENAME_H_FEB57674_34B0_4043_BB8B_D4651FE588CB__#define __FILENAME_H_FEB57674_34B0_4043_BB8B_D4651FE588CB__#ifdef _MSC
2007-04-29 10:07:00 2375 1
原创 实现用类名来动态创建类
突发奇想写了这个非常简单,但是很有用的东西:需要 boost 库支持文件名: Runtimeclass.hpp #include #include #include using std::string;
2006-08-16 23:42:00 2042 1
原创 3D 中的方位 (读书笔记)
方位,就是方向+位置, 物体”方向“,指物体的朝向,比如说3D空间中的一个人脸,可以面向你,也可以面向天空。 直观的想象,每个物体都有6个自由度,代表位置的 x, y, z 坐标,以及绕 x, y, z 轴旋转的角度,很容易想到,可以用3个数来描述一个物体的方向。欧拉角正是一个用3 个数来描述方向的描述方式, 一般用 所谓 " heading-pitch-bank" 约定,在左手坐
2006-06-20 11:29:00 2068
原创 STL & Boost 相关中文信息收集(持续更新中)
STL & Boost 相关中文站点信息STL中文站 STLChina.orgSTLChina.org 的 Boost 中文站Boost 文档中文翻译组(google groups,上去也许需要想点办法),他们的 SVN: https://boost-doc-zh.googlecode.com/svn/trunkBoost 安装文档B
2006-03-06 10:24:00 4369 4
原创 析构函数的秘密
C++ 对虚拟析构函数的解释:By making the Base class Destructor virtual, both the destructors will be called in order. The order of execution of destructor in an inherited class during a clean up is like this. 1
2006-01-26 10:23:00 1335 2
转载 Yacc 与 Lex 快速入门
原文地址:http://www-128.ibm.com/developerworks/cn/linux/sdk/lex/Lex 与 Yacc 介绍Ashish Bansal软件工程师, Sapient 公司2000 年 11 月 Lex 代表 Lexical Analyzar。Yacc 代表 Yet Another Compiler Compiler。 让我们从 Lex 开始吧。LexLex 是一
2005-10-25 17:49:00 1181
转载 volatile 关键字说明
volatile的本意是“易变的” 由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。对于一个变量,如果编译器发现赋值后,没有变化,编译器就可能优化代码,直接从寄存器或取数据,而不是从内存获取。如果由于某种原因,变量被操作系统等编译器未知的原因更改,程序可能没有获得最新的值。volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更
2005-10-24 17:44:00 1227
转载 使用可变(mutable)成员隐藏实现细节
作者: Danny Kalev 关键字 mutable 是一个奇怪的修饰符(specifier),它只能够用于一个类的非静态数据成员。下面我将讨论 mutable 的语义和用法,但是首先我要解释一下 C++ 对象模型的一个关键概念。对象的状态一个对象的状态由其非静态数据成员的值构成,因此,修改一个数据成员将会改变整个对象的状态。将一个成员函数声明为 const 能够保证它不会改变对象的状态
2005-10-24 17:28:00 1024
原创 Xml 中的名字空间
刚学 XML 的朋友经常会被名字空间搞糊涂,我来做一下简单的解释。xml 节点的一般写法是 如果名字空间前缀省略,就是使用默认名字空间。节点名相同,而属于不同名字空间的节点是不同的。世界上有无数的 xml 文档,也就有无数的节点、属性,它们的名字很可能是相同的。名字空间,就是是为了区别名字相同,而意义不同的节点、属性。比如文档 A 和 文档 B 中都有一个名叫 "car" 的节点,但是文档 A
2005-03-02 15:47:00 1630
原创 同时使用 xml, schema 和 xslt 的例子
以前从来没有用过 schema, 这次希望能给我的 xml 文件加上 namespace, schema, 然后用 xslt 转换成 html, 没想到花了不少功夫。现在我把工作正常的结果记录下来,希望对大家有些帮助。先来看看我的 xml 文件。打算用来定义网页的菜单。 很简单的 xml 文件,抛开弯路不提,用 xmlspy 的 Generate Schema 功能自动生成 sch
2005-03-02 15:04:00 2477
原创 在VB中使用文件对象
在VB中使用文件对象纲要 随着Visual Basic Scripting Edition2.0版本的发布,微软提供了一种全新的文件操作方法——文件系统对象(FileSystemObject)。用对象编程,这正是开发者们所希望用到。这个对象,包括一些其它的相关对象,封装了所有的文件操作。这篇文章将向你介绍这些对象,并且展示如何利用它们来编程。 正文 在VB中使用文件对象作 者 : 扬
2001-10-10 14:07:00 1444
原创 在VB和Web页面中使用Shell对象
在VB和Web页面中使用Shell对象 武汉测绘科技大学光电工程学院电子工程系 朱劼 ---- 什么是Shell对象?具体来讲,就是微软对一些常用外壳操作函数的封装。象打开或浏览一个文件夹、查找文件、关闭计算机等等,而且还能浏览整个文件系统,获取文件或文件夹的各种信息。由于这些封装是建立在OLE自动化服务的基础之上,所以我们就可以在VB和Web中方便的使用它们。 ---- 在VB中
2001-09-18 10:24:00 1506
原创 DirectShow 导航
我们网站还有好多DirectX 8的翻译,就不一一贴了。Microsoft DirectX 8.0导航这个部分描述这个 Microsoft® DirectShow® 文档是如何组织的。如果你有以前使用 DirectShow 的经验,阅读“DirectShow 中的新内容”。它描述包含在Microsoft® DirectX® 8 中的新特性。 如果你刚开始
2001-07-19 12:55:00 1807 2
原创 DirectShow 导言 - DirectX SDK 中文化小组献上
DirectShow 导言Microsoft® DirectShow® 应用程序界面 (API) 是Microsoft® Windows® 平台的一种媒体流体系。DirectShow 提供高品质的媒体流捕捉和回放。它支持宽松的格式变化,包括高级流格式 (ASF), Motion Picture Experts Group (MPEG), Audio-Video Interleaved (AVI
2001-07-19 12:48:00 2364 2
原创 在VC++中访问和修改系统注册表
(广东 粟利民 孙强) Windows95/98的注册表包含了Windows95/98的系统配置、PC机的硬件配置、Win32应用程序和用户的其他设置信息。注册表和INI文件不同,它是多层次的树状数据结构,具有六个分支(根键),每个分支又由许多的键和键值组成,而每个键则代表一个特定的配置项目。 在实际的编程工作中,我们遇到了如何在Visual C++中对Windows95/98注册表整个树状
2000-11-08 22:25:00 1252
原创 VB中获取逻辑磁盘的信息
我们在编程的时候有时会需要得到系统中逻辑磁盘的一些信息,如磁盘卷标、磁盘序列号、空间大小、剩余空间等,这些信息直接使用VB提供的函数显然是无法得到的。但是,借助于VB对WINDOWS API函数的支持,使用GetVolumeInformation和 GetDiskFreeSpace这两个API函数,我们就可以很容易的得到磁盘的相关信息。 先来谈谈这两个函数。GetVolumeInformati
2000-11-08 22:20:00 1533
LLVM-8.0.0-win64
2019-03-25
cmake-3.13.4-win64-x64.msi
2019-03-13
resiprocate 1.8.12
2013-08-26
resiprocate 1.6 源码包
2011-03-29
bjam 第三方库编译脚本
2010-06-12
DXUT框架剖析 CHM 版
2009-12-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人