用 AWK 自动生成模块定义(.def)文件

编写 DLL 的时候,如果导出的函数过多,就往往会在编写 .def 文件的步骤大费周章,唯恐遗漏掉哪个函数。在这种情况下,就需要借助代码来处理这个文件了。嗯,AWK 是一个很赞的选择。

在这整个的处理过程中,最核心的技巧其实就是从头文件中提取所有的导出函数名称。为了便于提取,就需要统一函数的声明格式,这样才能使正则表达式发挥最大的威力。考虑下面的例子:

int MYAPI MyLibFoo1(int arg1);
int MYAPI MyLibFoo2(int arg1, int arg2);

当然,所有含有导出函数声明的头文件肯定是约定俗成地被放在某个目录下,比如 include。

接下来就是用于生成 .def 的 AWK 脚本了,如下:

1
2
3
4
5
6
7
8
# def_gen.awk
BEGIN { printf("LIBRARY \"MyLib\"\n\nEXPORTS\n\n") }
 
{
    if (0 != match($0, /MYAPI (MyLib.*)\(/, mr)) {
        printf("%s\n", mr[1])
    }
}

然后在 Cygwin 下执行这个脚本:

awk -f def_gen.awk path/to/include/*.h > MyLib.def

简单说明一下:

  1. BEGIN 语句块在整个的 AWK 扫描过程中只执行一次,因此可以用来输出 .def 的头信息。
  2. match 是正则表达式的匹配函数,所有匹配结果放在第三个参数之中。
Categories: 技术的角落 | Tags: | Leave a comment

一句话(59)

花了不到一天的时间,一口气读完了爱川晶的《六月六日诞生的天使》。莫说是推理小说了,把我读过的所有小说都算上,似这般沉迷的程度都是极少出现过的。这部作品有着《脑髓地狱》般的悬念设计和超越了《穆赫兰道》的情节翻转,再加上润物细无声的流畅行文,完全称得上一部叙述性诡计的佳作。推荐。

若是五分满分的话,我会给本作打五分。其中四分为客观打分,另一分则加在了书中那些能让读者生理反应爆棚的香艳描写上。#

Categories: 随感录 | Tags: , | Leave a comment

一句话(58)

爱丽丝有三宝:奎因,絮叨,栖麻搞。——有栖川有栖《女王国之城》读毕有感。

解释一下。“有栖”的英文拼写为 Alice;“奎因”是指作者的埃勒里·奎因式推理;“絮叨”是指拖沓冗长的剧情;“栖麻搞”是指书中有栖和麻里亚二角的暧昧情节。

此三宝者,放诸任意一部江神二郎系列作品中皆准。如我之前对《双头恶魔》的书评#

Categories: 随感录 | Tags: , | Leave a comment

一句话(57)

雷蒙德·钱德勒《漫长的告别》读毕,这本书让我对钱德勒刮目相看。菲利普·马洛仍然是那个玩世不恭的贫嘴美国佬,但整本书的故事性却甩出了《高窗》几条街——真是一波三折、跌宕起伏。在这本书里,先前《高窗》中那些高逼格的渲染不再显得做作,而是与硬汉马洛的历险记几近完美地结合在了一起。

当然,推理仍然不是这本书(或者说,很可能是马洛全系列)的着力点。但是,这又有什么关系呢?这本书已经足够好看了,推荐!#

Categories: 随感录 | Tags: , | Leave a comment

一句话(56)

鲇川哲也《紫丁香庄园》读毕,还不坏的本格作品。对于暴风雪山庄题材而言,最难处理的就是当事人一个个死亡后真凶的隐藏。鲇川处理这个问题时玩了个诡计,可能会让习惯了新本格的读者有些不甘心。不过在作者的那个年代里,践行诡计的同时还要兼顾故事的合理性和精彩性,所以也就没有必要苛求太多了。#

Categories: 随感录 | Tags: , | Leave a comment