迷梦小筑—让灵魂在代码中无限升华
我幸运,并不是所有的猫都可以拥有大脑!
 看到这个问题,很多人会很奇怪:声明API不就一个dllimport属性就搞定?

 情况永远没有想象中那么简单,由于微软给出的SDK帮助永远是为VC定做的,我们常常没有办法了解到某一个DLL到底有什么函数。今天就有位写程序的兄弟问我SHSendBackToFocusWindow的声明方式,他称根据SDK的说明在声明中VS一直提示无法在DLL中找到该方法。

 我按他所说的情况查询了微软的SDK,其中说明是这样的:

Smartphone: Smartphone 2002 and later.

OS Versions: Windows CE 3.0 and later.

Header: tpcshell.h.

Library: Aygshell.lib.

按照常规,库Aygshell.lib改了libdll后即为函数的调用DLL名字,但根据这种方法声明,运行时果然出现了函数不存在的报错。

 我第一反应是用VS自带的depends工具来查看Aygshell.dll的内容,depends是一个极好的工具,他可以显示指定DLL内的函数和DLL依存关系。

但不幸的事,VS2005无法在模拟器中将此文件复制出来,看来这个DLL属系统的核心组件。

 所有的一切又回复到了原点,手工的资本依然只有SDK中指出的Aygshell.lib。但兴幸的是,从dos黑暗时代走来的程序员中,我的猫脑依稀还存在一些神秘的记忆,dumpbin命令!这个命令可以列出DLL中的信息,但不知它用于lib时有什么效果?

一个重定向符>可以使Dos命令的输出导入到一个文件中,于是在VS的命令窗口我输入:

dumpbin aygshell.lib /all>Luck.txt

在这个luck.txtExports节中我找到了函数的入口点:

97    SHSendBackToFocusWindow

接下来一切迎刃而解,函数声明如下

 [DllImport("Aygshell.dll", EntryPoint = "#97")]

    private static extern void SHSendBackToFocusWindow(uint uMsg,      uint wp,     uint lp);

本blog文档不经作者许可,谢绝转载!
posted on 2006-06-23 21:54  拍拍猫脑  阅读(647)  评论(0编辑  收藏  举报