阅读:1384回复:4
这种傻事谁做过?
有一套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的函数时会有这种问题了!所以可以排除这种错误。我觉得核心模式的编译与用户态的编译肯定是不同的,所以对静态连接库的调用在内核态和用户态也不一样! 这种现象我不能给出一个全面的理由,还望个位大虾指教! |
|
沙发#
发布于:2002-05-29 12:41
当然不行了!
唯一的解决方案就是:要求产品厂商提供内核态的API。 我觉是你所用的产品和我作的差不多。我当时为作这个内核API可是费了不少劲! |
|
板凳#
发布于:2002-05-29 13:01
嗯,同意,用户态的API是好做的,只要把一些代码编译成lib或dll就可以了,可是内核态的API的制作我却一无所知!请问哪里有这方面的文档资料啊?多谢指教!
|
|
地板#
发布于:2002-05-29 13:09
你最好问清楚,它的DLL是用于User mode 还是 kernel mode ,因为以DLL形式的组件也可以是kernel mode。
不过,我想它应该是只用于应用层的。 你到底是制作内核API,还是只调用内核API? [Edited on 5/29/02 by blue] |
|
地下室#
发布于:2002-05-29 15:25
谢谢版主的回答!
我现在是要调用内核的API,不过,我求知欲比较强,所以,我想知道内核态的API是如何封装的!我猜想(一般来说,内核态的API也是对某种设备的操作的封装,例如ndis): 一种情况是:内核态本来就有Driver,要想在自己的驱动程序里调用该Driver的功能,要么就是把该Driver看成一个服务,调用内核的函数,打开该服务,然后调用服务,如果把打开调用等操作做一个封装,那么内核态的API就出来了,它当然也可以是DLL的形式。 另一种情况就是:内核态本来就没有驱动程序,实际上这时候的封装就是HAL了,至于HAL到底如何屏蔽底层的硬件的,我就更不知道了。 不知道我说的对不对!望赐教! |
|