driverlanser
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2005-10-30
  • 粉丝0
  • 关注0
  • 积分39分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2295回复:10

DDK中不能使用STL??DriverWorks不能使用STL??

楼主#
更多 发布于:2005-07-25 11:09
  我看文档里有使用STL但是在自己的WDM驱动里一用STL元素就出现链接错误
error LNK2001: unresolved external symbol _exit
error LNK2001: unresolved external symbol _fprintf
error LNK2001: unresolved external symbol __iob
而且也不能使用抛出异常,否则也会出链接错误

究竟是DDK的限制还是DriverWorks的限制?
tigerzyj
驱动牛犊
驱动牛犊
  • 注册日期2004-09-25
  • 最后登录2021-08-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-25 11:37
当然不行了,stl 中用到了 c 的运行库,这个库在核心里是不能调用的.你必需把相应的函数改为内核函数才能用
xpxhh
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2016-01-09
  • 粉丝1
  • 关注1
  • 积分52分
  • 威望27点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-07-27 14:19
可以用的,只要包含DriverWork\Common\Include\stl下的头文件,连接DriverWork\Common\lib下的cppexcpt.lib即可。不能用stl和异常处理还叫c++吗?使用异常时打开/gx开关,默认是关闭的。
driverlanser
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2005-10-30
  • 粉丝0
  • 关注0
  • 积分39分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-28 11:23
下面是引用xpxhh于2005-07-27 14:19发表的:
可以用的,只要包含DriverWorkCommonIncludestl下的头文件,连接DriverWorkCommonlib下的cppexcpt.lib即可。不能用stl和异常处理还叫c++吗?使用异常时打开/gx开关,默认是关闭的。


请问使用DS的STL名字空间怎么写,还是std吗
driverlanser
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2005-10-30
  • 粉丝0
  • 关注0
  • 积分39分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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帮忙看看
xpxhh
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2016-01-09
  • 粉丝1
  • 关注1
  • 积分52分
  • 威望27点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-07-29 11:19
bad_alloc应该是一个异常类吧,连上cppexcpt.lib就好了吧。向vc连接路径配置里加入它所在的目录,如果用#pragma commen(lib,"cppexcept.lib")的话,可能要去掉ignore all default lib选项。试试看。
xpxhh
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2016-01-09
  • 粉丝1
  • 关注1
  • 积分52分
  • 威望27点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-07-29 11:22
DriverWork及DriverNetwork下封装了好多的c++类,许多人都不知道,就好像放着MFC不用只用SDK一样。
xpxhh
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2016-01-09
  • 粉丝1
  • 关注1
  • 积分52分
  • 威望27点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-07-29 11:28
driverlanser帮忙试试,这样怎么抓不到异常呢?刚开始学做驱动,摸不着头脑。

try
{
    *(ULONG*)0=0;
}
catch(...)
{
    // some code
}
driverlanser
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2005-10-30
  • 粉丝0
  • 关注0
  • 积分39分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-07-29 14:20
追查ds源码发现要使用stl(是sgi的)#include <kstl.h>是关键

你给的代码可以抓到异常呀
driverlanser
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2005-10-30
  • 粉丝0
  • 关注0
  • 积分39分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-07-29 14:45
你的异常好厉害,竟然能soft ice关掉!!
这个异常可以抓住而且似乎没有什么影响?!
xpxhh
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2016-01-09
  • 粉丝1
  • 关注1
  • 积分52分
  • 威望27点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-08-01 14:12
好像在Dispatch level下抓不到,可能是因为不能响应软件中断吧。
游客

返回顶部