迷梦小筑—让灵魂在代码中无限升华
我幸运,并不是所有的猫都可以拥有大脑!
posts - 4,  comments - 24,  trackbacks - 0
 看到这个问题,很多人会很奇怪:声明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 拍拍猫脑 阅读(292) 评论(0)  编辑 收藏 所属分类: P/Invoke档案

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-06-23 21:58 编辑过
成果网帮您增加网站收入


相关链接:
 


我与猫、计算机一起生活在神秘的程序世界,我的爱好是利用猫脑开发智能移动设备...

联系方式:
email:missilecat@163.com
QQ:85403578


<2006年6月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

与我联系

搜索

 

常用链接

留言簿

我参与的团队

随笔分类

随笔档案

文章分类

最新评论

阅读排行榜

评论排行榜