Posted on 02-09-2010
Filed Under (技术) by waterlin

不知道为什么,之前还能在 Visual Studio 2005 下编译得好好的工程,今天突然就碰到下面的问题:

Error    1    error MIDL2025 : syntax error : expecting ] or , near "annotation"    C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\unknwn.idl    108
Error    2    error MIDL2026 : cannot recover from earlier syntax errors; aborting compilation     C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\unknwn.idl    108

这个是 MIDL 编译器相关的问题,当你给新版本的 Windows SDK 头文件使用旧版本的 MIDL 编译器时,就会有这个问题。

解决的办法,就是把你新版本的 MIDL 编译器添加到 Visual Studio 的包含目录里。微软 Mike Wasson 的博客 MIDL error: ‘annotation’ 对此有着详细的解释,内容摘要如下:

A colleage recently got this error while compiling unknown.idl:

1>C:\Program Files\Microsoft SDKs\Windows\v6.0\Include\unknwn.idl(108) : error MIDL2025 : syntax error : expecting ] or , near "annotation"
1>C:\Program Files\Microsoft SDKs\Windows\v6.0\Include\unknwn.idl(108) : error MIDL2026 : cannot recover from earlier syntax errors; aborting compilation

If you get this error, you are using a new version of the Windows headers with an older version of the MIDL compiler.

Fix:

1. Make sure you installed the MIDL compiler when you installed the latest Windows SDK. It should appear under "Program Files\Microsoft SDKs\Windows\v6.0\Bin".

Note: To install the MIDL compiler, you need to select Developer Tools / Windows Development Tools / Win32 Development Tools in the Windows SDK setup wizard. (At least, as of RC1.)

2. In Visual Studio, under Tools > Options > Projects and Solutions > VC++ Directories > Executable Files, add

    x:\Program Files\Microsoft SDKs\Windows\v6.0\bin

to the top of the list.
(0) Comments    Read More   
Posted on 31-08-2010
Filed Under (文化) by waterlin

“达达达….,碰,碰,碰,啊,达达达….”

然后史泰龙、阿诺、威利斯三个动作影星,一起亮相调侃一翻,暗示以前史泰龙、阿诺拍片相互竞争的事情,还调侃一番阿诺想当总统的笑话。

然后,又是一长串子弹横飞的镜头:”哒哒哒,哒哒哒”;”砰,砰,砰”;”啊~~~~”

随机循环……直到死机为止……

友情提示,看此片前最好复习一下以下影片:《第一滴血》、《反斗神鹰》、《魔鬼司令》、《玩命快递》、《再造战士》,以及复习一下好莱坞动作片史,这样看起来才会有看历史片的感觉。

(0) Comments    Read More   
Posted on 25-08-2010
Filed Under (技术) by waterlin

在用 Visual Studio 2005 建立生成安装文件的工程时,因为应用程序的需要,在安装的时候要求 Windows Installer 把用户选择的安装路径写到注册表里。这个时候,有什么解决办法呢?

可以在生成安装文件的工程里,手动插入一个系统预留的属性值(即需要转义的字符串),在 Windows Installer 安装程序的时候,会自动把这些属性值替换掉。可以用 []{} 来把该属性值括起来。

例如,右键点击”安装工程名称 ==> 视图 ==> 编辑器 ==> 注册表”,这时,可以添加如下注册表项:

HKEY_CURRENT_USER|HKEY_LOCAL_MACHINE\Software\[Manufacturer]\

这样,在 Windows Installer 安装程序的时候, [Manufacturer] 就会自动转义为实际的值。当然,如果没有对应的系统预留属性值,则转义为空值( blank )。

系统预留的属性值有很多个,例如对于安装目录来说,是 [TARGETDIR] ,即 [TARGETDIR] 会根据安装时用户选择的安装路径赋值。当你在注册表里,需要填写程序安装路径的时候,就可以用这个属性值来占位。Windows Installer 在安装的时候,自然会把它替换为实际路径。安装后,会显示为类似于下面的路径:

C:\Program Files\TestApp\TestAppFirstPart\

如果你需要在注册表里指定相应的可执行文件或动态链接库,比如说,你要在注册表里插入下面的路径:

C:\Program Files\TestApp\TestAppFirstPart\test.dll

这时,你就应该在工程里把属性值设为:

[TARGETDIR]test.dll

注意 [TARGETDIR] 生成的目录会有最后一个 \ 号。

更多 Windows Installer 使用技巧可以看 Windows Installer (MSI) Tips and Notes

(0) Comments    Read More   
Posted on 11-08-2010
Filed Under (文化) by waterlin

最近因为工作原因,很需要找一些旧的专业书籍来恶补一下,例如《COM本质论》、《深入解析ATL》之类的,以前看过,一知半解,现在有了实战经验,想仔细地研究一下。上网一搜,这些书全成绝版了。

成为绝版的原因,无外乎书的销量不行、出版社不赚钱之类的。这些技术,在应用软件开发中,很少有人会深入地去研究。再加上技术的日新月异,一些新的技术替代品出现,唯有像我这种喜欢刨根问底的人,才有兴趣去翻一翻。

无奈之下,下了一份没有版权的电子版,在电脑前痛苦的看着。

曾经也有着太多似曾相识的经历,记得以前在网上买书,想买一些老的科幻小说、或是其它怀旧故事书籍,结果大都绝版买不到了。可能并不是真正的绝版,只是因为时间久销量不乐观,所以不再重印了吧。

这些经历,使得我太期望电子书时代来占领全球了,到那时,我第一个投诚!

电子书时代,这一切都将变得简单,我只要付钱买一份拷贝就行了,服务商只要用一点小硬盘来永久保存这个原始拷贝就可以了。这样,应该不会绝版了吧~~那些经不起时间洗涮的书籍,也就让它永远睡在计算机的比特里,而索引到这个比特地址的指针将无比的地长……

电子书时代,也不用再为买不买纸质书而烦恼了。看着堆了一屋子的纸质书,对于我们这种居无定所的人来说,搬家的时候可怎么办哦?

电子书时代也有缺点,永远也体验不到把书翻得粉碎的快感了,也许只能看着立体的数据示意图发呆!电子书时代,也将体现不到著作等身的陶醉了,那时,或许会用”汗硬盘充比特”来容易,哈。

(1) Comment    Read More   
Posted on 11-08-2010
Filed Under (技术) by waterlin

在用 Emacs Muse 或 Org 来写文档的时候,经常需要用到内部链接,尤其是要链接到某一章节,这个时候,启用固定的锚链接是最合适的方法。

Muse的锚链接

经常需要内部链接 Emacs Muse 写的文档,即链接一个锚链接,可以用下面的方法设置一个锚链接:

#Open-Ubuntu-ssh

把上面这个语句放到文档的任意地方,然后,在 Muse 文档里直接用下面的方式即可生成锚链接:

[[test.html#Open-Ubuntu-ssh][test anchor link]]

当然,如果你要链接其它文件的锚链接,则要加上相应的文件名。

Org Mode 的锚链接

Emacs Org Mode 也可以方便地实现文档内部的锚链接功能,与 Muse 类似,用下面的语句就可以生成相应的锚链接:

# <<My Target>>

把上面这句话放到文档的任意地方,即可设置文档的锚连接。至于目标链接的形式,和普通链接一样。

对比

Org Mode 比 Muse Mode 设计得更好的地方在于:如果你没有用形如 # My Target 的方式来设置锚链接,并且你依然采用了锚链接的形式来生成一个链接,则 Org 会自动根据你文档的子标题关键字来寻找最接近的锚链接(当然,这个方法对中文标题来讲,会麻烦一些吧?)。

(0) Comments    Read More   
Posted on 27-07-2010
Filed Under (技术) by waterlin

今天在写《Emacs Org Mode 与 BibTeX 的结合》这篇笔记的时候,有一段如下的东西要放到文章里:

#+TODO: TODO(t) STARTED(s) | DONE(d) DEFERRED(f) REFTEX

结果我忘记在前面空格,导致我一用 C-c C-t 来设置 Org 笔记状态的时候,Emacs 只显示上面这几种状态。

害得我把今天在 .emacs 里新加的设置全部取消来找原因,折腾了很久,无果。最后碰巧发现是这句的问题,真是郁闷死了!

所以,以后用 Org Mode 写东西,注意放在 block 里的内容,最好都空格而不是顶格写。

(0) Comments    Read More   
Posted on 27-07-2010
Filed Under (技术) by waterlin

我在多台电脑上使用 Emacs,同时也开启了 Desktop 功能,可是我并不想让所有电脑的 .emacs.desktop 存储的是同一批文件,这样我可以在不同的电脑上有针对性地干不同的事情。因此,我琢磨着,怎么在用 Dropbox 同步 Emacs 文件的时候,并不同步 .emacs.desktop 文件。

总的来说,可以有几种方法来设置这个 .emacs.desktop 的相关信息:

  1. 自动化配置

    通过使用命令 M-x customize-group RET desktop 可以配置 desktop 的相关属性,即打开 desktop 组的设置选项进行相关设置。

  2. 可以通过下面的代码来进行相关的设置
(setq desktop-path '("~/.emacs.d/"))
(setq desktop-dirname "~/.emacs.d/")
(setq desktop-base-file-name ".emacs-desktop")

因为我用 Dropbox 在多台电脑里同步 Emacs 配置文件,所以采用的是第2种方法,这样各台机的配置就不会相互影响了。如果你需要针对不同的机器设置不同的参数,可以参考多台电脑间同步 Emacs 配置文件的方法,针对不同的机器使用不同的参数进行配置;如果设置项太多,还可以写成一个函数重复调用。

(0) Comments    Read More   
Posted on 27-07-2010
Filed Under (技术) by waterlin

Emacs Org Mode 可以是一个优秀的笔记工具,可是,如果你想用它来写正式一点的论文,可以吗?当然可以了,你可以把 Org Mode 和 LaTeX 结合起来用,当然最重要的是要解决参考文献引用的问题。

整体的思路如下:

  1. 先准备好你的 BibTeX 文件

    可以用 Emacs BibTeX Mode 或 JabRef 之类的方式来生成这个文件,当然也可以用其它文献管理工具,只要它能导出 BibTeX 文件即可。

  2. 用 Emacs Org 建立工程并记笔记

    创建 Org 工程的时候,和一般的工程没有任何区别。

  3. 用 RefTeX 方式来插入 BibTeX 的记录

在这里,重点介绍一下第三个步骤,即如何在 Org Mode 里插入 BibTeX 记录。从官方的这篇参考文献里可以看出,我们可以用三种方法在 org 文件里引用 BibTeX 参考文献,从而插入 LaTeX 类的参考文献。

1). 最简单的办法,给所有的 Org 文件指定一个 BibTeX 文件,然后在 Org 文件里插入该 BibTeX 文件的参考文献记录

具体的办法,先把下面的代码放到 .emacs 里:

(setq reftex-default-bibliography
      (quote
       ("default.bib" "~/org/notes/refer.bib")))
(define-key org-mode-map (kbd "C-c )") 'reftex-citation)

在这里,我指定的 BibTeX 文件为 default.bib~/org/notes/refer.bib 。然后,可以在所有的 Org 文件里,通过命令 C-c )M-x reftex-citation 来进行参考文献的插入,根据提示进行相关操作即可。

2). 为特定的 Org 文件,指定特定的 BibTeX 文件

这个方法是 Marios Braindump 的博客里介绍的,具体方法如下:

先把下面的代码放到 .emacs 里:

(defun org-mode-reftex-setup ()
  (load-library "reftex")
  (and (buffer-file-name)
       (file-exists-p (buffer-file-name))
       (reftex-parse-all))
  (define-key org-mode-map (kbd "C-c )") 'reftex-citation))
(add-hook 'org-mode-hook 'org-mode-reftex-setup)

然后在你需要插入 BibTeX 参考文献的 Org 文件里,加入下面这段话(可以是任意位置):

\bibliographystyle{plain}
\bibliography{BIB-NAME}

把上面的 BIB-NAME 换成你想指定的 BibTeX 文件,这样就可以对该 Org 文件指定特定的 BibTeX 文件,然后可以用 C-c )M-x reftex-citation 来插入该 BibTeX 文件里的参考文献。

上面的代码会在 Emacs 启动的时候,要求你指定一个 master 文件,用来存储生成的 tex 文件。

3). 另外一种方法,实现为特定的 Org 文件指定特定 BibTeX 文件的功能

还有另外一种方法,可以实现第2种方法类似的功能,即为特定 Org 文件指定特定 BibTeX 文件的方法。把下面的代码放到 .emacs 文件里:

(defun org-mode-article-modes ()
  (reftex-mode t)
  (and (buffer-file-name)
       (file-exists-p (buffer-file-name))
       (reftex-parse-all)))

(add-hook 'org-mode-hook
          (lambda ()
            (if (member "REFTEX" org-todo-keywords-1)
                (org-mode-article-modes))))

然后把下面这一行加到你需要插入 BibTeX 的 Org 文件的开头:

#+TODO: TODO(t) STARTED(s) | DONE(d) DEFERRED(f) REFTEX

其它步骤与第2种方法类似。这种方法我没有仔细测试,有兴趣的 Emacser 们可以试试。

通过以上方法,就可以在用 Org Mode 打造的笔记本里,很方便地索引 BibTeX 里的参考文献了。

当然,如果你不喜欢用 Org Mode,也有其它用 Emacs 来写论文的思路,例如:Emacs + AucTeX + RefTeX + Outline-minor-mode

(1) Comment    Read More   
Posted on 15-07-2010
Filed Under (技术) by waterlin

在 Emacs 里用 Org mode 来编辑,如果链接一张图片,只能显示图片的链接地址,并不能真正显示一张图片。

如果用 iimage 这个 minor mode,则可以使 Emacs 在编辑区里显示图片。下载 iimage.el 文件扔到 Emacs 的目录里,然后在 .emacs 里添加下面的代码:

;; iimage mode
(autoload 'iimage-mode "iimage" "Support Inline image minor mode." t)
(autoload 'turn-on-iimage-mode "iimage" "Turn on Inline image minor mode." t)

然后就可以用命令

M-x iimage-mode RET

在当前模式里启动 iimage 这个 minor mode。

如果想在 Emacs org 模式里启用 iimage 模式,把下面的代码放到配置文件里,则可以在 Emacs Org 的编辑区里显示图片。

(defun org-toggle-iimage-in-org ()
  "display images in your org file"
  (interactive)
  (if (face-underline-p 'org-link)
      (set-face-underline-p 'org-link nil)
      (set-face-underline-p 'org-link t))
  (iimage-mode))

以后要写图文并茂的笔记就方便多了,不用发布后再浏览图片在文章里的效果了。

可以用 M-x org-toggle-iimage-in-orgM-x iimage-mode 命令来激活 iimage 模式,类似以下这些链接形式会直接显示为图片:

file://foo.png
`file://foo.png'
[[foo.gif]]
‹foo.png›
`foo.JPG'
(1) Comment    Read More   
Posted on 14-07-2010
Filed Under (软件) by waterlin

对于经常写博客的人来说,挑选一个最适合发布博客的工具,是提高效率、减少出错可能性的一个好办法。在我写博客的过程中,我试用了不少的博客发布软件,比较喜欢的有下面几款,它们有各自的优缺点。

  1. Zoundry Raven

    这个是我最常用的博客发布软件,它有一个最好的功能,就是可以同时发布多个博客,省去了在多个博客平台同步博客文章的麻烦。

  2. ScribeFire

    这个是 Firefox 的插件,非常好用,功能简单明了,在 Firefox 里,看到什么网页内容有了灵感,马上就可以撰文发布,真是方便!缺点是不能同时发布博文到几个博客。

    Google Chrome 版也出了 ScribeFire,而且做得非常漂亮,也支持直接贴图。

  3. Windows Live Writer

    这个是微软少有做得非常精巧的工具,一扫微软东西丑、大、慢的特点,与 Live Spaces 结合得很紧密。缺点也是显而易见的,没有办法同时发布一篇文章到多个博客上。

  4. WizKnowledge

    WizKnowledge 是个人知识管理工具,它附带的博客发布功能比较弱,好像目前只支持 WordPress,而且没有目录、标签等功能。但是,有一点非常好,就是支持直接从网上复制图片并发布。相比于其它博客发布客户端,这种发布图片的功能,并不仅仅是外链一张其它网站的图片,而是直接把图片上传到你的服务器然后再显示出来。

    其它博客发布工具不支持类似这种从网页上复制、上传图片功能,而只是添加一个图片外链,可能是出于图片版权之类的考虑。

  5. Emacs Weblogger

    这个基本上没啥好说的,Emacser 才会用的玩意,个人感觉不是太好用,补全做得也不好。

这些工具大体上来说功能都差不多,没有必要一直停留在琢磨用哪个工具好这一层面上。

(1) Comment    Read More