摘要:
在msdn中关于GetOverlappedResult的描述如下:GetOverlappedResult FunctionRetrieves the results of an overlapped operation on the specified file, named pipe, or communications device.BOOL WINAPI GetOverlappedResul... 阅读全文
摘要:
当你写下new和delete的时候,到底发生了什么事呢,让我们来做个试验看看。写一段小代码:class a{public: a() { foo(); } int foo() { return 0; } ~a() { bar(); } int bar() { return 1; }};int _tmain(int argc, _TCHAR* argv[]){ a* tmp = new a()... 阅读全文
摘要:
小弟正在写一个基于命令行的播放器,开源,代码在google code上:
基本的播放功能和简单的列表管理已经完成了。
浏览的话随便谁都可以,
如果想参与开发,帮助小弟把东西做完善,那就留个言。
期待牛人的加入。 阅读全文
摘要:
最近在看《软件调试》这本书,为了加深理解,就到google code里搜了一个叫opendbg的开源debugger看看代码。这个项目的最后更新日期是08年8月,似乎又烂尾了,这种烂尾开源项目真是数不胜数,不过幸好opendbg的整体架构已经搭出来了。让我们直接进ring0,看作为一个debugger需要在内核里做什么事情要进ring0,一定要写driver,driver的入口多半是DriverE... 阅读全文
摘要:
原文在这里 预定义宏 许多Object-like宏是预定义的,你在使用它们的时候不必关心它们的定义。它们大致可被分为3类:标准,普通,系统相关。 在c++里,有第四类宏,它就是命名操作符。它们使用起来就和预定义宏一样,但你不能undefine它们。 标准预定义宏 普通预定义宏 系统相关预定义宏 c++命名操作符 标准预定义宏 标准预定义宏由相关的语言标准定义,所以它们在所有(支持标准)的编... 阅读全文
摘要:
原文在这里 可变参数宏 宏可以接收可变参数列表,就跟函数一样。定义可变参数的语法和函数也差不多。这里有一个例子: #define eprintf(...) fprintf (stderr, __VA_ARGS__) 这类宏被称为可变参数宏。当一个宏被调用时,第一个命名参数之后的所有符号,包括逗号在内,都变成参数列表。这个符号序列在宏展开时会替换宏内容里的__VA_ARGS__ 符号。因... 阅读全文
摘要:
原文在这里 连接 在宏展开过程中把两个符号连接在一起的特性往往会很有用。我们管这种特性叫符号粘贴或者符号连接。"##" 就是用于符号连接的预处理操作符。当一个宏展开后, "##" 两边的符号就会被组合成一个,然后该组合后的符号会替换"##"两边的符号以及"##"本身。通常情况下"##"两边的符号都会是标识符,或者一边是标识符,一边是预处理号。粘贴之后,一个更长的标识符就被生成了。这不是唯一有效的情... 阅读全文
摘要:
原文在这里 字符化 有的时候,你也会想把一个宏参数直接转化成一个字符常量。你想要在某个字符串中插入宏参数,期待它会简单的被替换成字符常量,想法不错,但不可能。不过你可以用"#"预处理操作符。当一个宏参数前置"#"时,预处理器就会把宏参数符号替换成跟宏参数符号相同的字符常量。与常规参数替换不同的是,该类转化不叫宏展开,而叫"字符化"。 把一个宏参数混在字符串内部,然后字符化它,这种操作是不可能成功的... 阅读全文
摘要:
假设硬件ID为 USB\VID_aaaa&PID_bbbb\PRODUCTNAME 系统会在注册表HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum 下为每个字段生成一个目录,比如ID中的第一个字段为USB,那么Enum下会生成USB子目录,第二个字段为VID_aaaa&PID_bbbb,则在USB目录下生成VID_aaaa&PID_bbb... 阅读全文