阅读:2295回复:10
DDK中不能使用STL??DriverWorks不能使用STL??
我看文档里有使用STL但是在自己的WDM驱动里一用STL元素就出现链接错误
error LNK2001: unresolved external symbol _exit error LNK2001: unresolved external symbol _fprintf error LNK2001: unresolved external symbol __iob 而且也不能使用抛出异常,否则也会出链接错误 究竟是DDK的限制还是DriverWorks的限制? |
|
沙发#
发布于:2005-07-25 11:37
当然不行了,stl 中用到了 c 的运行库,这个库在核心里是不能调用的.你必需把相应的函数改为内核函数才能用
|
|
板凳#
发布于:2005-07-27 14:19
可以用的,只要包含DriverWork\Common\Include\stl下的头文件,连接DriverWork\Common\lib下的cppexcpt.lib即可。不能用stl和异常处理还叫c++吗?使用异常时打开/gx开关,默认是关闭的。
|
|
地板#
发布于:2005-07-28 11:23
下面是引用xpxhh于2005-07-27 14:19发表的: 请问使用DS的STL名字空间怎么写,还是std吗 |
|
地下室#
发布于:2005-07-28 11:27
是声明了一个这样的成员
deque<int> m_dd; 编译过了,链接过不了 Linking... DmaPool.obj : error LNK2001: unresolved external symbol __imp__malloc DmaPool.obj : error LNK2001: unresolved external symbol "public: __thiscall std::bad_alloc::bad_alloc(class bad_alloc::bad_alloc const &)" (??0bad_alloc@std@@QAE@ABV01@@Z) DmaPool.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall std::bad_alloc::~bad_alloc(void)" (??1bad_alloc@std@@UAE@XZ) DmaPool.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::bad_alloc::bad_alloc(char const *)" (__imp_??0bad_alloc@std@@QAE@PBD@Z) DmaPool.obj : error LNK2001: unresolved external symbol __imp__free .\objchk\i386\TSDVBASIBroCard.sys : fatal error LNK1120: 5 unresolved externals Error executing link.exe. 请xpxhh帮忙看看 |
|
5楼#
发布于:2005-07-29 11:19
bad_alloc应该是一个异常类吧,连上cppexcpt.lib就好了吧。向vc连接路径配置里加入它所在的目录,如果用#pragma commen(lib,"cppexcept.lib")的话,可能要去掉ignore all default lib选项。试试看。
|
|
6楼#
发布于:2005-07-29 11:22
DriverWork及DriverNetwork下封装了好多的c++类,许多人都不知道,就好像放着MFC不用只用SDK一样。
|
|
7楼#
发布于:2005-07-29 11:28
driverlanser帮忙试试,这样怎么抓不到异常呢?刚开始学做驱动,摸不着头脑。
try { *(ULONG*)0=0; } catch(...) { // some code } |
|
8楼#
发布于:2005-07-29 14:20
追查ds源码发现要使用stl(是sgi的)#include <kstl.h>是关键
你给的代码可以抓到异常呀 |
|
9楼#
发布于:2005-07-29 14:45
你的异常好厉害,竟然能soft ice关掉!!
这个异常可以抓住而且似乎没有什么影响?! |
|
10楼#
发布于:2005-08-01 14:12
好像在Dispatch level下抓不到,可能是因为不能响应软件中断吧。
|
|