如何在net中声明智能设备的API

  看到这个问题,很多人会很奇怪:声明 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改了lib为dll后即为函数的调用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.txt的Exports节中我找到了函数的入口点:

97    SHSendBackToFocusWindow

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

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

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

本blog文档不经作者许可,谢绝转载!

转载于:https://www.cnblogs.com/DreamlikeAttic/archive/2006/06/23/434311.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值