星期五, 三月 30, 2007

学习WIX

这两天有一个项目要打包,在学习WIX.

这里有详细的学习教程
http://www.tramontana.co.hu/wix/




在网上搜了一下,发现有很多人都用wix做过asp.net和sql的程序的安装包。
大家在做的时候都碰到并解决了各种问题。为什么没有人共享一个完整的ASP.net和sql的安装方案,省得走弯路。等我研究好了,考虑是否共享方案。

WIX有自带的CustomAction可以创建数据库,不知道这个创建数据库的定制任务有没有其它依赖关系。会不会要机器上先有Sqlserver的OLEDB驱动。谁要是知道的话请告诉我。

星期四, 三月 29, 2007

对Emacs进行了改造

下载了Emacs23的源代码,把里面的win32的输入法处理部分改成了使用Unicode 的API.
这样用windows的输入法,输入去当前codepage不一样的语言就没问题了。

我等这个功能等了很久了,一直看不到别人加,终于忍不住自己加了。
做过了才发现,如果对Win32的系统很熟的话,修改还是非常容易的。

Emacs23的代码很多,我没有去尝试看懂它的全部代码。即使我修改好了,我也不知道Emacs到底是什么样的结构。

我看代码是直接用cscope。首先找到Win32的消息循环部分。因为输入法的几个消息必须从这里进入Emacs。
我首先查看现在的WM_CHAR是如何处理的。发现Emacs会把操作系统过来的消息,封装成平台无关的消息,送到自己的消息循环中。

而且在自己的消息循环里可以处理unicode的字符和ascii的字符。这就方便多了。我只要把Windows的输入法的字符串用unicode API取出,一个字一个字送入Emacs内部的消息循环就行了。我知道应用程序没有处理输入法的完成编码的消息时,Windows默认会把字符串一个个的转成WM_IME_CHAR消息,如果还没有处理,会把每个WM_IME_CHAR转成2个WM_CHAR。这就是现在的Emacs的win32输入法部分的工作情况。由于Emacs使用的是win32的ansi API。窗口类是非unicode api注册的,所以只能接受ANSI的消息,WM_IME_CHAR的消息里是双字节的字符,不是Unicode的,所以我必须在这之前处理。用unicode的API自己取出字符串,自己一个个的转成Emacs内部消息,这样修改是最小的。

实际用了三天的时间研究代码和修改。最后还加了光标跟随和设置输入法用的字体的功能。

开发过程中发现,一个日本人维护着一个功能更复杂的输入法部分的patch.
不过我的代码更短,功能当然也只有最基本的。

http://yyyccclll.googlepages.com/emacs.patch