sunnnn
驱动牛犊
驱动牛犊
  • 注册日期2002-01-30
  • 最后登录2009-03-20
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1384回复:4

这种傻事谁做过?

楼主#
更多 发布于:2002-05-29 11:18
有一套API带有Lib库和DLL库,很明显,它的一些使用Sample都是用户态程序,现在我的老板要我在核心态的驱动程序中调用这套API,
我觉得这样肯定行不通!结果也是这样,即使我在soruces文件中指明TARGETLIBS也不行,编译就通不过,错误如下:
protocol.obj() : error LNK2001: unresolved external symbol _ZRemoveKey@12
protocol.obj() : error LNK2001: unresolved external symbol _ZLogInCard@4
objchk\\i386\\passthru.sys() : error LNK1120: 8 unresolved externals

这个问题我已经考虑到C++调用C的函数时会有这种问题了!所以可以排除这种错误。我觉得核心模式的编译与用户态的编译肯定是不同的,所以对静态连接库的调用在内核态和用户态也不一样!
这种现象我不能给出一个全面的理由,还望个位大虾指教!
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-29 12:41
当然不行了!
唯一的解决方案就是:要求产品厂商提供内核态的API。
我觉是你所用的产品和我作的差不多。我当时为作这个内核API可是费了不少劲!
sunnnn
驱动牛犊
驱动牛犊
  • 注册日期2002-01-30
  • 最后登录2009-03-20
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-29 13:01
嗯,同意,用户态的API是好做的,只要把一些代码编译成lib或dll就可以了,可是内核态的API的制作我却一无所知!请问哪里有这方面的文档资料啊?多谢指教!
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-29 13:09
你最好问清楚,它的DLL是用于User mode 还是 kernel mode ,因为以DLL形式的组件也可以是kernel mode。
不过,我想它应该是只用于应用层的。
你到底是制作内核API,还是只调用内核API?

[Edited on 5/29/02 by blue]
sunnnn
驱动牛犊
驱动牛犊
  • 注册日期2002-01-30
  • 最后登录2009-03-20
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-29 15:25
谢谢版主的回答!

我现在是要调用内核的API,不过,我求知欲比较强,所以,我想知道内核态的API是如何封装的!我猜想(一般来说,内核态的API也是对某种设备的操作的封装,例如ndis):
一种情况是:内核态本来就有Driver,要想在自己的驱动程序里调用该Driver的功能,要么就是把该Driver看成一个服务,调用内核的函数,打开该服务,然后调用服务,如果把打开调用等操作做一个封装,那么内核态的API就出来了,它当然也可以是DLL的形式。
另一种情况就是:内核态本来就没有驱动程序,实际上这时候的封装就是HAL了,至于HAL到底如何屏蔽底层的硬件的,我就更不知道了。

不知道我说的对不对!望赐教!
游客

返回顶部