阅读:2139回复:6
快来看看一些驱动开发的语法问题――
函数调用:
NdisQueryPacket( MyPacket, NULL, NULL, &FirstBuffer, &TotalPacketLength ); 函数原型: NdisQueryPacket( IN PNDIS_PACKET Packet, OUT PUINT PhysicalBufferCount OPTIONAL, OUT PUINT BufferCount OPTIONAL, OUT PNDIS_BUFFER *FirstBuffer OPTIONAL, OUT PUINT TotalPacketLength OPTIONAL ); 问题: (1) TotalPacketLength代表整个包的长度,是整数,程序中也可以把它作为简单的整数使用,为什么函数调用中写成了&TotalPacketLength,C语言中的“&”表示它修饰的变量是对应变量的引用,那么TotalPacketLength就是包长度的引用了,是吗? 那么PUINT到底又是什么意思呢? (2) PVOID呢?它的确切含义是什么? (3) 调用函数中的&FirstBuffer,为什么要这么写? 对应函数原型中的格式是OUT PNDIS_BUFFER *FirstBuffer OPTIONAL啊! 这些在程序中可以学着范例使用,但还是有些基本的语法不太明繁劳这里的同志们给与解答。 还有函数原型: NdisQueryBuffer ( IN PNDIS_BUFFER Buffer, OUT PVOID *VirtualAddress OPTIONAL, OUT PUINT Length ); 对应的函数调用: NdisQueryBuffer ( firstBuffer, &VirtualAddress, &TotalBufferLength ); 为什么调用时的实参可以那么写? 为什么使用VirtualAddress时,可以是 VA=(char*)VirtualAddress; 而VA则成了字符数组? 比如if(VA[3] == 7)等等 |
|
最新喜欢:zb_xi
|
沙发#
发布于:2001-09-25 12:48
问题太简单了吗? 那么哪位给推荐一本详细讲解语法的书,好吗? |
|
|
板凳#
发布于:2001-09-25 15:05
1) TotalPacketLength代表整个包的长度,是整数,程序中也可以把它作为简单的整数使用,为什么函数调用中写成了&TotalPacketLength,C语言中的“&”表示它修饰的变量是对应变量的引用,那么TotalPacketLength就是包长度的引用了,是吗?
是引用 2)那么PUINT到底又是什么意思呢? 是 unit 指针 如果写成 unit *length你觉得是否更好理解? 3)那么PVOID到底又是什么意思呢? 就是一个指针,没有具体类型,可以按照需要自己进行类型转换 4)调用函数中的&FirstBuffer,为什么要这么写? 对应函数原型中的格式是OUT PNDIS_BUFFER *FirstBuffer OPTIONAL。 这一次用的是地址,原来的申明是指针的指针 5)VA=(char*)VirtualAddress; 就是按照需要进行的类型转换 6)而VA则成了字符数组? 比如if(VA[3] == 7)等等 没看懂是什么意思。 答的不对,请各位高人指正 |
|
地板#
发布于:2001-09-25 15:07
对了,这里涉及了c++,microsoft c的语法,看什么书,我也不知道
|
|
地下室#
发布于:2001-09-25 16:47
1) TotalPacketLength代表整个包的长度,是整数,程序中也可以把它作为简单的整数使用,为什么函数调用中写成了&TotalPacketLength,C语言中的“&”表示它修饰的变量是对应变量的引用,那么TotalPacketLength就是包长度的引用了,是吗?
是引用 我认为这里应为地址传递。PUNIT 不就是指针吗。所以当然用地址来传递了啦。 |
|
|
5楼#
发布于:2001-09-25 23:12
哥们,ddk里面虽然用到了很多对象的思想,但是只不过是
基于对象的思想,而不是面向对象。base object不是面向 对象阿。何况所有代码都是c写的。 ddk里面并没有完全按照ms的编码风格,也就是匈牙利风格, 很多指针都没有用p前缀。那是因为几乎所有的结构的传入 参数都用指针传递,这样最快。那些需要传出的当然更是 只能用指针了。除了类型前缀之外,全局变量也不用g_前缀, 不过除了前缀之外,别的地方基本上还是使用了匈牙利风格的。 此外ddk里面的风格似乎也并不完全一致, 例如很多函数返回一个nt_status,但是也有不少函数返回 void,真正的返回值在第一个参数pndis_status。 我开始以为是效率上的考虑,但是后来我做了一些试验, 没有发现有多大的不同,我个人还是喜欢第一种,至少 后面的代码可以直接swithch()。 我强烈的建议好好学习c语言。此外学习对象的思想是很重要的 |
|
|
6楼#
发布于:2001-09-28 13:32
衷心感谢大家!!!
|
|
|