设为首页 加入收藏

TOP

6.1.1 一个简单的例子
2013-10-07 13:20:24 来源: 作者: 【 】 浏览:62
Tags:6.1.1 一个 简单 例子

6.1.1  一个简单的例子

首先我们尝试把用户程序中最简单的类拷贝到内核中,编译链接,看看行不行。下面就是笔者定义的整数类,它封装一个整数,对象能够被当成整数使用。

  1. class  clsInt{  
  2. Public:  
  3.    clsInt(){m_nValue = 0;}  
  4.    clsInt(int nValue){m_nValue = nValue;}  
  5.    void  print(){KdPrint(("m_nValue:%d\n", m_nValue));}  
  6.    operator int(){return m_nValue;}  
  7.  
  8. private:  
  9.    int  m_nValue;  
  10. }; 

上例是一个非常简单的类定义,我们将在DriverEntry函数中使用它,分别定义一个局部变量和动态创建一个对象。我们通过Debug信息来观察对象行踪,希望能够得到正确的输出。入口函数中的定义如下:

  1. extern "C" NTSTATUS DriverEntry(  
  2.      IN PDRIVER_OBJECT  DriverObject,  
  3.      IN PUNICODE_STRING  RegistryPath  
  4.      )  
  5. {  
  6.     // 创建两个对象,一个是局部变量,一个是动态创建的  
  7.     clsInt obj1(1);  
  8.     clsInt* obj2 = new(NonPagedPool, 'abcd') clsInt(2);  
  9.  
  10.     // 打印Log信息  
  11.     obj1.print();  
  12.     obj2->print();  
  13.     delete obj2;  
  14.  
  15.     // 让模块加载失败  
  16.     return STATUS_UNSUCCESSFUL;  

上面代码中先后创建了两个clsInt对象,一个是在栈中创建的,初始变量为1;一个是动态创建的,初始变量为2。后者由于是动态创建的,必须手动调用delete函数释放内存,所以其析构函数比前者先调用。我们必须从Log信息中得到类似的脉络,以证明其正确性。代码请参看simClass工程。图6-1是Log信息的截图,我们如愿以偿地得到了想要的结果。

 
图6-1  对象Log信息
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6.1.2 new/delete 下一篇6.1.5 栈的忧虑

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: