随笔分类 -  C++

摘要:题: 给定一个序列S以及它的一个子序列T,求S的所有包含T的子序列。例: S = [1, 2, 3, 2, 4] T = [1, 2, 4] 则S的所有包含T的子序列为: [1, 2, 3, 2, 4] [1, 2, 3, 4] [1, 2, 2, 4] [1, 2, 4] 解: 首先可以拆解为两个 阅读全文
posted @ 2016-09-05 01:04 泉子 阅读(2292) 评论(0) 推荐(0)
摘要:环境:VS2008我们都知道,链接器在生成可执行程序时,会忽略那些没有用到的符号。但是昨天遇到一个链接问题,看起来与这条基本策略并不相符。首先看一个静态链接库的结构: lib | |---------------------| ... 阅读全文
posted @ 2015-04-24 18:07 泉子 阅读(821) 评论(0) 推荐(0)
摘要:日前遇到一件事:WebBrowser中的网页会用到一个“大众”ActiveX控件,为了保证兼容性以及和其它程序互不干扰,我们采用这样一种方案:1. 我们的软件会自带该控件;2. 如果系统中已注册有该控件的话,我们不用会我们的控件进行覆盖注册;3. 不管怎么样,我们的程序都只会加载我们自带的控件。要做到第3条,显然要HOOK控件位置有关的注册表项。因为之前在做播放器时使用过同样的手段来处理媒体解码器,所以其实并没有什么难度。但事实上却差点阴沟里翻船。我一定确定以及肯定的是,我需要HOOK的只有几个API:RegQueryValue、RegQueryValueEx、RegGetValue。用ZwQ 阅读全文
posted @ 2014-03-29 22:46 泉子 阅读(1634) 评论(0) 推荐(0)
摘要:之前结合网上的一些代码及ATL::CImage的实现,自己写了一个将HBITMAP以PNG格式保存到文件到函数。见上一篇日记。不过,后来换了个环境又发现了问题,昨天和今天上午把《Windows程序设计》中位图处理相关的部分又粗略瞄了一下,然后把之前的函数改了一下,现在在新环境下也可以了,当然,这个函数也并不十分严谨,但是考虑到位图格式的历史渊源和复杂性,测试起来目测会相当麻烦,还是不要深究的好。而且,现在基本上都是32位图像,老的格式中很多东西都已无用武之地,所以且将就用着。首先,幸好需要处理的只是带Alpha通道的图像,而Alpha通道只有ARGB有,ARGB又不需要颜色表(每个像素值都是真 阅读全文
posted @ 2014-03-08 14:52 泉子 阅读(3124) 评论(1) 推荐(0)
摘要:带Alpha通道的图像(ARBG)在通过GDIPlus::Bitmap::FromHBITMAP等转为GDI+位图,再存储时,透明区域会变成纯黑(也有可能是纯白?)。网上找了两段保持透明的实现代码,列在下边,经测试,第一段无效,第二段有效,这两段代码正好可以对比说明:FromHBITMAP在拷贝图像数据时,原图中的Alpha数据确实没有Copy过来,而并非是未设置图像属性的问题。第一段的思路是:直接用FromHBITMAP创建一个GDI+位图,新建另一个带PixelFormat32bppARGB标识的位图,再从前者拷贝数据到后者;第二段的思路是:获取BITMAP数据,新建一个带PixelFor 阅读全文
posted @ 2014-03-03 20:14 泉子 阅读(4798) 评论(3) 推荐(0)
摘要:VisualStudio6.0编译PWLib总结1. 我的环境Visual Studio 6.0Visual Studio.NET 2010Microsoft Platform SDK for Windows Server 2003 R2Microsoft SDKsMicrosoft DirectX 9.0 SDKMinGW2. 注意尝试编译前,请务必阅读http://www.cnblogs.com/yedaoq/archive/2011/02/22/1960866.html。本文只涉及部分我在我的编译环境中遇到的,并且官方编译说明中没有包含的问题。3. 项目变动、编译顺序在官方文档中,提到的 阅读全文
posted @ 2011-02-22 15:11 泉子 阅读(1854) 评论(0) 推荐(0)
摘要:最近接触到这个函数,因此了解了一下,总结一下列在这。我了解它的出发点是如何通过它向活动窗口输入字符,这是很多程序都有的功能(我猜Visual Assist X就用了这个功能)。根据MSDN,此函数模拟按键操作,将一些消息插入键盘或鼠标的输入流中,Windows对它进行处理,生成相应的WM_KEYDOWN或WM_KEYUP事件,这些事件与普通键盘输入一起进入应用程序的消息循环,它们不仅可以转换为WM_CHAR消息,还可以转换为其它(诸如加速键)等消息。使用它来发送字符消息,并没有看起来那么简单。这有两个需要考虑的问题:1. 输入法的转换。例如需要向活动窗口发送一些英文字符,我们可能想象这样来实现 阅读全文
posted @ 2010-12-30 17:05 泉子 阅读(28014) 评论(2) 推荐(3)
摘要:今天去看了看传说中的华为招聘,结果没呆多久,做了几道笔试题和一道上机题,然后就回来了。没什么大意思,不过这道上机题还是个亮点,哈哈。 题目看起来是很简单的,就是给一个字符串,要求将其中的空格字符替换为逗号。 而且程序模板都已经定好,main的内容写好了,转换函数的原型也定义好了。实在是非常简单,简单得让我有点纳闷。很快写好程序: 运行一下,问题出来了,程序会在这行代码出现异常: memcpy(*pOutputString, pInputString, lInputStringLen); 异常内容是Access violation访问空指针,查看一下各变量值。发现问题是*pOutputStrin 阅读全文
posted @ 2010-12-12 23:07 泉子 阅读(1667) 评论(1) 推荐(0)
摘要:在上周完成的一项工作中,发现了一个当时有点困惑的问题: 当编写供VB调用的C++ DLL时,必须使用def文件来定义导出符号,否则VB程序将链接失败。我们都知道使用def文件是为了避免C++编译器对函数进行重命名,另一个达到相同效果的替代方式是使用extern "C"标识符。若DLL由C++、C#、Java等调用,后者可以工作得很好;然而VB不可以,即便使用了extern "C"来标识导出函数,... 阅读全文
posted @ 2010-11-17 14:19 泉子 阅读(2135) 评论(0) 推荐(0)
摘要:1. DLL的接口必须在.def中声明,否则VB无法调用。根据已有资料,.def文件完成的作用是与extern "C"相同,也就是说如果在接口定义的头文件中使用了extern "C",则不需要在.def中声明。在实际中,供C++、C#和Java调用的DLL都只需要使用extern "C"来声明接口即可,VB应属一个特例,具体原因尚不清楚。 2. VB声明原型时,对值类型参数时,传入参数需用ByV... 阅读全文
posted @ 2010-11-16 22:30 泉子 阅读(2449) 评论(0) 推荐(0)
摘要:原文链接:http://blog.csdn.net/gogor/archive/2010/02/24/5323599.aspx 我们知道,计算机只能识别诸如0101这样的二进制数,于是人们必须以二进制数据与计算机进行交互,或者先将人类使用的字符按一定规则转换为二进制数。 那什么是字符呢?在计算机领域,我们把诸如文字、标点符号、图形符号、数字等统称为字符。而由字符组成的集合则成为字符集,字符集由于... 阅读全文
posted @ 2010-09-14 13:31 泉子 阅读(1953) 评论(0) 推荐(1)
摘要:MFC通过_AFXEXT来决定AFX_EXT_CLASS等宏应编译为导出还是导入。扩展DLL的项目预定义有_AFXEXT宏,因此,AFX_EXT_CLASS被编译为导出类;非扩展DLL项目不带有_AFXEXT宏,因此, AFX_EXT_CLASS被编译出导入类。同一个文件中的符号在不同的工程被编译为不同的涵义,这就是使用扩展DLL的项目中能够直接使用扩展DLL定义的头文件的原因。 问题则是,当一... 阅读全文
posted @ 2010-09-04 17:43 泉子 阅读(1102) 评论(0) 推荐(0)
摘要:前注: 这是自己平时写的一些小代码,未必有用及符合设计原则,若有不妥之处,还请大家指教。 说明: 虽然INI这种配置文件早已不被微软所推荐,但至少在VC6下用C++编写一些小程序时,用INI还是有其长处的:简单的INI要比简单的XML更加直观(当然在复杂情况则相反);Windows提供了专门的API来读写INI配置,只需一条语句即可。 不过在最近写的几个小程序中,也发现了私有配置文件读写API... 阅读全文
posted @ 2010-09-01 18:05 泉子 阅读(1080) 评论(3) 推荐(0)
摘要:目前使用的Visual Studio 6.0的MFC4.2使用的是Winsock1.1,听说MFC7.1中使用的也是。 最近,为了使用WSAIoctl,需要把使用Winsock2,不过不能直接在项目中Include Winsock2.h,因为Winsock2.h是Winsock.h的一个超集,直接添加会与已包含的winsock.h发生命名冲突。 在网上参考了一些相关的资料,最后将MFC中引用的... 阅读全文
posted @ 2010-08-26 23:38 泉子 阅读(2585) 评论(0) 推荐(0)
摘要:手头有个C++的DLL,是公司的一个远程通话功能组件。长久以来,这个DLL对外只有三个操作接口。而从合理的角度来说,这个DLL本应再提供一些回调接口或事件之类的东西,用于在通话状态被动改变时通知外层应用程序。不过银行里的规矩多多,不能用ActiveX;而使用回调,却又似不那么的稳定,尤其在与C#交互时。所以才一直就这么用着。 直到最近,外层应用程序的开发人员提意见抱怨这个DLL。于是,一狠心,决... 阅读全文
posted @ 2010-08-24 14:06 泉子 阅读(2992) 评论(0) 推荐(0)