ATL 编程的两个 trick
调试 dll
写一个简单的 atl 组件. 也少不了调试. 自然就需要一个程序来调用这个组件. ActiveX 控件有 ActiveX Control Test Container. 但好像不能加载普通的组件. 写一个 exe 来加载, 自然也不难. 但终究有些麻烦. 如果是支持 IDispatch 接口. 那么用脚本来调用组件是最简单的. 比如一个这样的 vbs 文件. 就可以实现调用:
'atldb.vbs
set db = CreateObject("Atldb.DB")
db.Execute("insert into [data] values(1)")
但 vc6 只支持调试 EXE, 也有办法, 指定被调试的程序为 cscript.exe, 把脚本文件作为参数. 现在 F7 编译好, 按 F5, 就可以调试啦.
shellext
这个不是原创, 是我在这里(http://www.sellsbrothers.com/tools/regsvr.reg)看到的. 以前也见过. 好像是用 dll 实现的. 还是这个简单, 一个 reg 文件, 而且比较全. 右击一个 dll, tlb, ocx, exe, olb.. 等等文件, 出现与 COM 相关的一些菜单项: reg/unreg, view in OLEVIEW.. 但有个小问题. 原版本的 View in OLEVIEW 不能用. 分析发现, 改成这样子就好了(假设你的机器里将 vc6 安装到了默认路径):
[HKEY_CLASSES_ROOT/dllfile/shell/View in OLEVIEW/command]
@="/"C://Program Files//Microsoft Visual Studio//Common//Tools//oleview.exe/" %L"
[HKEY_CLASSES_ROOT/typelib/shell/View in OLEVIEW/command]
@="/"C://Program Files//Microsoft Visual Studio//Common//Tools//oleview.exe/" %L"
[HKEY_CLASSES_ROOT/exefile/shell/View in OLEVIEW/command]
@="/"C://Program Files//Microsoft Visual Studio//Common//Tools//oleview.exe/" %L"
改这个 reg 文件的时候, 修改/导入注册表好多次. 一直都是用 scite 的. scite 的好处尽可能的支持 F7/F5 等快捷键来编译/运行程序. 但是 F5 不支持 reg 文件. 虽然按 F5 导入 reg 文件的想法很自然. 而且 regedit.exe /s 本来也支持命令行参数. 找了一下, 发现在 other.properties 文件里加上这一句就可以了(可以加到最后).
command.go.*.reg=regedit /s $(FileNameExt)
改完一个 reg 文件后, 按 F5 就可以导入啦. 真方便.
-------------------------------------
看 other.properties 文件的时候, 偶然发现这个:
command.name.0.*.bat=Execute Selection
command.0.*.bat=$(CurrentSelection)
原来就是我一直想要的自定义功能键. 这里的设置是, 在编辑 bat 文件的时候, 将 ctrl + 0 设置为执行选中的文本. 第一行的作用是在 Tools 菜单下加入一个菜单项: Execute Selection.
以前看 scite 的帮助的时候好像看到过关于自定义功能键的说明. 但没有看太明白. 原来就是这个意思.:)