不知道为什么,之前还能在 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.
在用 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。
在用 Emacs Muse 或 Org 来写文档的时候,经常需要用到内部链接,尤其是要链接到某一章节,这个时候,启用固定的锚链接是最合适的方法。
经常需要内部链接 Emacs Muse 写的文档,即链接一个锚链接,可以用下面的方法设置一个锚链接:
#Open-Ubuntu-ssh
把上面这个语句放到文档的任意地方,然后,在 Muse 文档里直接用下面的方式即可生成锚链接:
[[test.html#Open-Ubuntu-ssh][test anchor link]]
当然,如果你要链接其它文件的锚链接,则要加上相应的文件名。
Emacs Org Mode 也可以方便地实现文档内部的锚链接功能,与 Muse 类似,用下面的语句就可以生成相应的锚链接:
# <<My Target>>
把上面这句话放到文档的任意地方,即可设置文档的锚连接。至于目标链接的形式,和普通链接一样。
Org Mode 比 Muse Mode 设计得更好的地方在于:如果你没有用形如 # My Target 的方式来设置锚链接,并且你依然采用了锚链接的形式来生成一个链接,则 Org 会自动根据你文档的子标题关键字来寻找最接近的锚链接(当然,这个方法对中文标题来讲,会麻烦一些吧?)。
今天在写《Emacs Org Mode 与 BibTeX 的结合》这篇笔记的时候,有一段如下的东西要放到文章里:
#+TODO: TODO(t) STARTED(s) | DONE(d) DEFERRED(f) REFTEX
结果我忘记在前面空格,导致我一用 C-c C-t 来设置 Org 笔记状态的时候,Emacs 只显示上面这几种状态。
害得我把今天在 .emacs 里新加的设置全部取消来找原因,折腾了很久,无果。最后碰巧发现是这句的问题,真是郁闷死了!
所以,以后用 Org Mode 写东西,注意放在 block 里的内容,最好都空格而不是顶格写。
我在多台电脑上使用 Emacs,同时也开启了 Desktop 功能,可是我并不想让所有电脑的 .emacs.desktop 存储的是同一批文件,这样我可以在不同的电脑上有针对性地干不同的事情。因此,我琢磨着,怎么在用 Dropbox 同步 Emacs 文件的时候,并不同步 .emacs.desktop 文件。
总的来说,可以有几种方法来设置这个 .emacs.desktop 的相关信息:
通过使用命令 M-x customize-group RET desktop 可以配置 desktop 的相关属性,即打开 desktop 组的设置选项进行相关设置。
(setq desktop-path '("~/.emacs.d/")) (setq desktop-dirname "~/.emacs.d/") (setq desktop-base-file-name ".emacs-desktop")
因为我用 Dropbox 在多台电脑里同步 Emacs 配置文件,所以采用的是第2种方法,这样各台机的配置就不会相互影响了。如果你需要针对不同的机器设置不同的参数,可以参考多台电脑间同步 Emacs 配置文件的方法,针对不同的机器使用不同的参数进行配置;如果设置项太多,还可以写成一个函数重复调用。
Emacs Org Mode 可以是一个优秀的笔记工具,可是,如果你想用它来写正式一点的论文,可以吗?当然可以了,你可以把 Org Mode 和 LaTeX 结合起来用,当然最重要的是要解决参考文献引用的问题。
整体的思路如下:
可以用 Emacs BibTeX Mode 或 JabRef 之类的方式来生成这个文件,当然也可以用其它文献管理工具,只要它能导出 BibTeX 文件即可。
创建 Org 工程的时候,和一般的工程没有任何区别。
在这里,重点介绍一下第三个步骤,即如何在 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
在 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-org 或 M-x iimage-mode 命令来激活 iimage 模式,类似以下这些链接形式会直接显示为图片:
file://foo.png `file://foo.png' [[foo.gif]] ‹foo.png› `foo.JPG'
最近一直在做 Windows Mobile 的移动开发,重装系统后,用 Visual Studio 2005 死活没有办法新建工程。
仔细地找了找答案,原来需要打上 Visual Studio 2005 SP1 的补丁才行!
另外,做 M8 的开发,也需要用上 Visual Studio 2005 SP1 才行,否则连 Samples 都编译不过。
在我的 Windows 系统下,用 Gpg4Win 来作为 Emacs EasyPG 文件加密解密的工具,可是每次用 EasyPG 打开加密的文件时,都会弹出一个对话框来让我输 Key。
弹出对话框来倒也无所谓,很要命的是,在这个对话框里,没有办法输入 Key。每每要用加密文件的关键时刻,我都不知所措,想尽办法重启电脑之类的来解决该问题。
今天一怒之下,改用 Cygwin 里的 GnuPG 了,现在 EasyPG 的表现和 Linux 下终于一样了,在 MiniBuffer 里输 Key 即可。
有人知道这是什么问题吗?是我哪里配置得有问题吗?
我之前是用 SVN 来在多台电脑间同步 Emacs 配置文件,主要是担心 Dropbox 不安全,导致文件随便就删掉了。没办法,Dropbox 的操作太便捷了。
现在发现,其实可以把 SVN 的文件也一起用 Dropbox 同步,这样就可以在任意一台电脑上同步所有文件在 SVN 里的状态,也可以同步 Gnus 使用的大量变化快速、不方便用 SVN 同步的文件。
不过我很害怕,不小心把 Dropbox 里的文件一下子全删掉了,Dropbox 虽然有文件恢复功能,不过我还是用 SVN 一起来同步比较保险。
哈,好吧,我承认,到目前为止,Dropbox 完胜了!