WDK编译boost(1.34.1)::regex

Windows Driver Kit里面的STL库啊啥的,基本是停留在VC6时代。不过也有一个好处,可以链接到msvcrt.dll、msvcp60.dll,因为这两个文件大家都有,所以可以减小最后生成的可执行文件的体积。然后比起VC6.0,WDK可以直接从微软那边下载来,而VC6直到最后也没像2005、2008、2010、2012、2013那样有个Express的免费版啥的。于是如果想自己弄了简单的小东西如果想要体积小、要链接到msvcrt.dll,感觉WDK是一个挺好的选择……

继续阅读WDK编译boost(1.34.1)::regex

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两种操作。

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

细思恐极的网站

在某个群里讨论东西的时候,突然说起了我前年做的某个AviSynth插件。因为有某些运行起来不稳定的原因,所以后来没有更新了。

既然说到了,我就到搜索引擎上搜索了一下这个东西的情况。结果发现了让人菊花一紧的一个网站链接

http://www.dllzj.com/sorathread.dll/

点进去是这个DLL文件的下载。具体说来,我还专门去下载了这个文件,最后发现下载来的这个文件和我最后一次编译所得到的文件在二进制层面上是完全一致的。

我觉得这个插件,就算是做得很有名的,到头来也就搞视频编辑的人会在用,更何况它还没有名。那么按理来说不应该被什么网站收录才对。如果是看中这个插件的功能,那么也不应该是这么一个页面丢在那边, 至少要有全套的说明才对。

所以这个怎么看,也是给“啊!系统提示缺DLL了,我要上网下一个”这种程度的人用的。这个网站提供下载的时候,我原来带的一切说明文档全部没有,配套使用的EXE想想也知道没可能在里面。

我非常在意的是,它为什么会收录这个DLL文件。目前来说,没有任何程序有可能在运行的时候提示“缺少sorathread.dll无法运行”,也就是说不应该成为这类网站收录的目标。所以我觉得很可能,是某些用户电脑上有什么流氓软件,把这个DLL文件给传上去了。

下载的压缩包里还带了一个叫做“DLL工具.exe”的东西,我没敢点开。不知道是什么东西。

 

3月3日更新:

今天又上那个网站看了一下,发现它是允许用户自己上传DLL文件上去的。非常想不通为什么会有人把这个DLL传上去,因为这个Avisynth插件的用户群体如此小众,其中会包含往这个网站上传东西的吗……如果有,那么目的是什么,因为想想也知道不会有程序运行的时候报找不到这个DLL文件。是……骗积分吗?

自制导入DLL用的LIB文件

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

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

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

现在域名是 blog.sorayuki.net ~