用溪流 WarKey 辅助红警开局快捷操作
摘要:背景 自从发现红警出了 ddraw 补丁可以在最新的系统里玩后,就开始怀旧了。但是由于手残,遇到别人抢地盘基本上直接崩了。偶然有一次发现像 08 这样的高手点 30 个坦克使用工具的。那么,我开局用工具造兵营、碉堡,是不是显得不那么可耻了呢? 说干就干,我有支持 lua 脚本的溪流 WayKey,理
阅读全文
posted @
2023-01-19 09:01
溪流
阅读(927)
推荐(2)
C++ 编译依赖管理系统分析以及 srcdep 介绍
摘要:C++ 编译依赖管理系统分析以及 srcdep 介绍 如果用 C++ 写一个中小型软件,有要用到很多第三方库的话,相信不少人会觉得比较麻烦。很多新兴的语言都有了统一的依赖管理系统和构建系统,但是 C/C++ 界一直没有比较正统的。(也不奇怪,连统一的 string 都没有,怎么可能有统一的依赖、构建
阅读全文
posted @
2023-01-11 09:16
溪流
阅读(589)
推荐(1)
建立一个简单干净的 gn+ninja 工具链
摘要:背景 事情的起因是,想找个跨 Windows 和 Mac 的构建方案。第一考虑自然是 CMake,毕竟基本上是事实标准了。 但是研究了一下 Modern CMake,也就是以 target 为核心的理念。但发现看了好几天文档,也折腾出了可用的东西,但仍然是没梳理清楚什么理念、原理。然后 CMake
阅读全文
posted @
2022-11-06 02:05
溪流
阅读(2520)
推荐(3)
微软拼音长句模式恢复工具支持Win10 1803
摘要:4月份就有人留言旧微软拼音恢复工具不支持Win10 1803了,我自己也遇到了,但因为没时间搞,勉为其难使用了词组模式的微软拼音几个月,终于在八月份抽个空研究了下,解决了。 这次是因为傻逼大微软改了 System32\IME\shared 里的东西,导致旧系统拷过来的文件与 System32\IME
阅读全文
posted @
2020-09-20 13:53
溪流
阅读(36)
推荐(0)
发布个工具,一键恢复Win8/8.1中的微软拼音长句模式(新体验模式)
摘要:(cnBeta:http://www.cnbeta.com/articles/277936.htm) 首先贴个图,大家来一起念台词~ 念完了木有?很激情澎湃义愤填膺有木有? 这事情最早追溯到前年 8 月的一篇文章《十个步骤找回 Win8 中的微软拼音新体验模式》,其实就是手工注册一个COM完事,只是
阅读全文
posted @
2014-03-26 01:10
溪流
阅读(64)
推荐(0)
将 Timer 对象化
摘要:Timer这玩意儿很常用,却又很烦人。烦人之处有四: 1. 如果将其设到HWND上,则 a) 必须手工维护Timer的ID,小心翼翼地保证这些ID不重复,可能有人(比如我)就不怎么喜欢手工维护硬编码的ID。 b) 必须跟一个HWND关联,在没有HWND的时候,或者HWND不方便用的时候,就麻烦了。比
阅读全文
posted @
2013-06-25 00:18
溪流
阅读(32)
推荐(0)
裸写一个进程外 COM 组件
摘要:引言 前面九月份的八篇关于COM的文章,说的都是进程内COM。那时,我们从一个含内嵌IE控件的窗口说起,根据COM协议手工书写了进程内COM组件,并由此积累了一些类似ATL的框架性代码。 今天开始,我们把脚步迈向进程外组件。同样是从最基础的开始,本篇我们将根据进程外COM组件的加载规范手工编写一个E
阅读全文
posted @
2012-12-02 19:56
溪流
阅读(164)
推荐(0)
让 COM 脱离注册表
摘要:引言 在上一篇《在 DLL 中加入第二个 COM 类》的“单用户注册”一节中,我们曾提到脱离注册表依赖一事,现在我们来把这事儿给办了。 注册 我们在之前支持了“regsvr32 /n /i:user COMProvider.dll”这一注册命令。这一注册命令给了我们一定的扩展余地。从ATL默认的代码
阅读全文
posted @
2012-09-21 00:34
溪流
阅读(25)
推荐(0)
在 DLL 中加入第二个 COM 类
摘要:引言 在前面几篇文章里,我们已经成功脱离ATL写了一个COM组件,并且实现了自动化。今天,我们来加入第二个类,并且为加入第二个类做一些整理工作。 为DLL建立一个Module类 在前面,我们为了使得DllCanUnloadNow能正确工作而放了一个全局变量LONG g_nModuleCount,并且
阅读全文
posted @
2012-09-12 00:23
溪流
阅读(50)
推荐(0)
让COM组件可被跨语言调用
摘要:错误修正 首先修正一下上篇(《裸写一个进程内 COM 组件》)中的例子的一个小问题。类厂的CreateInstance里面,上次是这么写的: STDMETHODIMP ClassFactory::CreateInstance(_In_opt_ IUnknown *pUnkOuter, _In_ RE
阅读全文
posted @
2012-09-09 12:43
溪流
阅读(80)
推荐(0)
裸写一个进程内 COM 组件
摘要:引言 前几天山寨了ATL的COM_INTERFACE,了解了一个COM类的如何进行通用的组织。今天再来学习下COM协议,看看如何实现一个COM组件——当然,也是不能用ATL的,不然就学不到什么了。 COM DLL说简单简单,说复杂也很复杂。说简单呢,其实貌似只要导出下面这五个函数就可以了: DllC
阅读全文
posted @
2012-09-07 00:23
溪流
阅读(91)
推荐(0)
写个含 Windows Media Player 的窗口
摘要:在上一篇中,我们实现了COM_INTERFACE宏,并且重新写了一个含有WebBrowser的窗口。在那里我们留了中间层OleContainer。为了验证OleContainer的可用性,现在来写一个含有Windows Media Player(下文简称“WMP”)控件的窗口。 WMP控件的容器类除
阅读全文
posted @
2012-09-04 22:16
溪流
阅读(31)
推荐(0)
山寨一下 ATL 的 COM_INTERFACE
摘要:上一篇我们简单学习了下ATL 的继承链处理。可是,如果要裸写一个含内嵌IE控件的窗口,还是要写一个很长的QueryInterface,以及AddRef和Release,确保引用计数的正确性。于是我们不得不参考ATL的COM_TNTERFACE的处理技巧,来达到一定程度上的易用性。 首先,除了IUnk
阅读全文
posted @
2012-09-03 23:17
溪流
阅读(26)
推荐(0)
学习下 ATL 的继承链处理
摘要:我们先来看一组接口定义: struct IX { virtual void MethodX() = 0; }; struct IXA : public IX { virtual void MethodXA() = 0; }; struct IXB : public IX { virtual void
阅读全文
posted @
2012-09-02 13:56
溪流
阅读(26)
推荐(0)
初步性能测试
摘要:因为接下去要做优化工作,在此之前,先做下简单的性能测试。 比较的对象是std::regex,暂时只比较两项: 1、解析正则表达式的速度 2、使用解析好的正则表达式去匹配字符串的速度。 测试代码如下: SECTION_BEGIN(StdRegExParse100000); PERFORMANCE_TE
阅读全文
posted @
2012-06-13 23:00
溪流
阅读(21)
推荐(0)
解析正则表达式(三)重复
摘要:引言 根据预告,这篇我们对“?”“+”“*”进行处理,实现对重复的支持。“x?”匹配0个或1个“x”,“x+”匹配1到任意个“x”,“x*”匹配0到任意个“x”。 有了重复,就有贪婪模式和非贪婪模式。在贪婪模式下,“x+”匹配“xxxyyy”中的“xxx”;在非贪婪模式下,“x+”匹配“xxxyyy
阅读全文
posted @
2012-06-08 23:35
溪流
阅读(52)
推荐(0)
解析正则表达式(二)字符集合
摘要:引言 这篇我们要实现的是中括号表达式。 一个中括号里写上任意数目的字符,表示匹配这些字符中的任何一个。比如“[abc]”匹配a或b或c。中括号里除了单个字符,也可以写字符区间,比如“[a-c]”就表示从a到c的所有字符,这里“a到c”是指内码连续的一系列字符,包含首尾的a和c。综合起来说,中括号里面
阅读全文
posted @
2012-06-04 22:19
溪流
阅读(42)
推荐(0)
解析正则表达式(一)概要
摘要:引言 想搞正则表达式解析器好久了。前面由于一些基础设施没准备好,没法开始动手。现在 xlLib 里头准备的差不多了,可以着手实施了。 在做这件事之前,读了好几遍 @vczh 的文章《构造可配置词法分析器》《构造正则表达式引擎》(http://www.cppblog.com/vczh/archive/
阅读全文
posted @
2012-06-03 15:16
溪流
阅读(24)
推荐(0)
利用已有的 bind 构造 ScopeExit
摘要:对于 ScopeExit,以前有提到过(见《这种代码结构如何组织?goto or do…while(0)?》)。使用场景再简单提一下: bool GenFile() { HANDLE hFile = CreateFile(_T("Test.txt"), GENERIC_WRITE, 0, NUL,
阅读全文
posted @
2012-05-20 23:07
溪流
阅读(36)
推荐(0)
调用约定总结
摘要:以前做 Function 的时候恰好取巧避免掉了,这些天在做 Bind,不得已要把每个调用约定罗列一遍。顺手把这些东西复习一下,总结如下—— (所有内容针对 VC 编译平台) 一、x86 名称 传参方式 栈清理 C 语言函数重命名(例:int func(int, double)) __cdecl 从
阅读全文
posted @
2012-05-12 01:36
溪流
阅读(32)
推荐(0)