分类目录归档:程序设计

WindowsDDK里用std::wstring的问题

今天晚上尝试帮某网友制作一个伪春菜的插件,能够检查两次调用过程中剪贴板里面的东西有没有变化(用GetClipboardSequenceNumber函数)和获取剪贴板里的内容(EnumClipboardFormats和GetClipboardData)。这里都不是重点,重点是我用了 这一篇博客 里面提到的CSaori库来编写。这个库里面的字符是wchar_t类型,这很好,也用了std::basic_string<wchar_t>(其实就是std::wstring),这也很好。不好的地方在于,我为了减小最终DLL的体积、用Windows Driver Kit里面的编译器来编译程序使得动态链接到运行库的时候,报错了。

继续阅读WindowsDDK里用std::wstring的问题

MinGW-GCC不支持通配符,make大法好

之前在公司做某个自动测试工具的时候,考虑到程序的灵活性,用了LUA作流程控制(嗯……结果到最后还被技术总监批评了,说工具本来很简单的被搞得复杂了,开始有各种奇怪的依赖了,有欠考虑)。这就需要编译LUA,但是当时公司的VisualStudio可能是配置不正确或者其他什么原因,VS的命令提示符打不开,我也懒得去修,最后用了GCC。装的是TDM-GCC 64位版。

然后呢就遇上了一个比较麻烦的问题:这个版本的GCC不支持通配符。平时我自己用的都是32位版本,新买的电脑虽然装的是64位系统但是一个是没买多久、一个是还没开发过64位程序,所以没搞过64位编译器。现在要编译出来DLL可能要给64位的C#程序调用,所以需要64位的编译器。然后它不能 gcc -shared -olua.dll *.c:出错信息说找不到叫做*.c的文件。以前一直用的32位编译器,对于这样的命令行都能正常运行的……

继续阅读MinGW-GCC不支持通配符,make大法好

数据结构之红黑树

红黑树本来来说应该是本科数据结构教学的内容,我当年领到的教科书上也有。但是因为抓得不严,总之最后是不了了之,连有没有教过都忘记了,自己也没有去学。现在过了这么多年,开始找工作了,发现有些公司似乎挺爱问这个的,关于STL的实现我原先一直以为map是靠AVL树实现的,具体是什么书上看来的我也忘记了。只是现在知道了它其实是红黑树也无济于事,因为完全没有去了解过它,一问三不知。现在就突然想起来,想要补一下这方面的知识。

在搜索引擎上面找了一通以后,发现国内的资料基本就那么几个版本,大家抄来抄去,一上来就跟你讲红黑树的性质,为什么这样、这么来的,只字不提。看着实在也很让人郁闷。把这些性质啥的全部硬记下来,然后写一写再体会也不是说就不是办法,但是个人比较讨厌。于是就想上网去找外国人写的教学。Bing搜索的英语版搜red-black tree tutorial这个关键词,然后就找了 http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_rbtree.aspx 这个来看。在我搜索的时候,这个是第一个结果。点进去看了也是比较容易理解,就决定用这个来学了。最终学习了它的Bottom-up insertion和Top-down deleteion两种操作。

继续阅读数据结构之红黑树

自制导入DLL用的LIB文件

调用DLL早不是什么新话题了。从LoadLibrary和GetProcAddress配合使用的动态加载,到链接导入LIB的静态加载,方法很多。LoadLibrary和GetProcAddress的方法虽然麻烦但是很通用,毕竟调用系统API就可以了,DLL名和函数名和都是字符串形式。导入LIB方式的话,生成DLL的时候会带一个LIB给你,拿来用即可。

后一种方法很方便。这里主要也是讲后一种。

继续阅读自制导入DLL用的LIB文件

在百度知道上浪费的人参……

觉得很无聊很空虚,想刷点存在感,想获得一些称赞,大概是开始玩百度知道的原因吧。

到现在为止,1037的采纳数,76%的采纳率,不知道投了多少人参上去。得来的物质上的,貌似也就只有一个4G的闪迪优盘、一对漫步者USB供电音箱,以及某些网友给的一些酬金吧。虽然确实有遇上惊喜。

找了找,把其中一些对初学者可能有帮助的,或者可能引领初学者入歧途(喂!)的东西,列出来。因为回答数实在太多了,临时想找哪个有点难找。

VC6MFC单文档,GDI+加载以资源形式存在EXE中的PNG图片并显示
http://zhidao.baidu.com/question/679888978915970892.html

API,调用GDI+显示JPG图片,不直接引用GDI+的头文件和库
http://zhidao.baidu.com/question/559451292687816764.html

VC6,MFC单文档,工程使用Unicode编译
http://zhidao.baidu.com/question/1690138823277150748.html

C#使用scanf和printf
http://zhidao.baidu.com/question/1493910399025633699.html

API,控制台读取原始输入(不用回车
http://zhidao.baidu.com/question/1302038457159464899.html

误导初学者的窗体绘制(GetDC、ValidateRect),PeekMessage控制循环
http://zhidao.baidu.com/question/239514627930323244.html

VC6,MFC对话框,硬生生地把框架改了,变更对话框的运行方式由模态改为非模态
http://zhidao.baidu.com/question/1817754248793407668.html

调用MSXML的COM组件生成XML,几乎没使用Util类……
http://zhidao.baidu.com/question/1603754618198172107.html

C#使用指针方式像C调用fread那样读入一个double数组
http://zhidao.baidu.com/question/679887972870049412.html

C#,窗口绘制动画效果
http://zhidao.baidu.com/question/623769969880808124.html

使用Picture控件显示自己的绘图
http://zhidao.baidu.com/question/751577345044752684.html

C# UDP P2P聊天软件,窗口多线程管理,托盘通知图标用队列
http://zhidao.baidu.com/question/198396697303598845.html

和上一个一样,不过这个是单线程的
http://zhidao.baidu.com/question/1573601760932158060.html

C# TCP 聊天软件(服务器转发型)服务器端,多线程
http://zhidao.baidu.com/question/623384064449050764.html

EasyX库和API一起用来搞窗口
http://zhidao.baidu.com/question/615675896645640292.html

Windows管道和共享内存的进程间通信,全用匿名HANDLE、继承方式传递
http://zhidao.baidu.com/question/1987815188193968067.html

Windows下使用内存映射文件,朴素字符串匹配(文件内容查找)
http://zhidao.baidu.com/question/1859683786174250867.html

四则运算表达式的解析和解释计算,以及编译计算(JIT)
http://zhidao.baidu.com/question/1110099820559411499.html

浮点数的二进制表示
http://zhidao.baidu.com/question/1430100495056721579.html

Win32 API,电子钟(指针式和数字式都有)
http://zhidao.baidu.com/question/1881746594204704668.html

使用Hook方式在某热键出现的情况下获取编辑框中选中的文字
http://zhidao.baidu.com/question/1731479450533449907.html

调用API创建快捷方式
http://zhidao.baidu.com/question/1881412521562861508.html

调用MSXML COM组件解析XML,仍然是几乎没有用Util类
http://zhidao.baidu.com/question/1957133298378414300.html

GdiPlus,绘制旋转的文字
http://zhidao.baidu.com/question/589306436.html

在跑窗口的线程里延时(不是Sleep)
http://zhidao.baidu.com/question/588425745.html

再往前的问题居然百度不给看了。只给看到31页。​