__HW_VTBL 结构体神奇!

typedef struct __HW_VTBL {
  PVOID (*
HWInit)(ULONG Identifier, PVOID pMDDContext, PHWOBJ pHWObj);
  BOOL (*
HWPostInit)(PVOID pHead);
  ULONG (*
HWDeinit)(PVOID pHead);
  BOOL (*
HWOpen)(PVOID pHead);
  ULONG (*
HWClose)(PVOID pHead);
  INTERRUPT_TYPE (*
HWGetIntrType)(PVOID pHead);
  ULONG (*
HWRxIntrHandler)(PVOID pHead, PUCHAR pTarget, PULONG pBytes);
  VOID (*
HWTxIntrHandler)(PVOID pHead, PUCHAR pSrc, PULONG pBytes);
  VOID (*
HWModemIntrHandler)(PVOID pHead);
  VOID (*
HWLineIntrHandler)(PVOID pHead);
  ULONG (*
HWGetRxBufferSize)(PVOID pHead);
  BOOL (*
HWPowerOff)(PVOID pHead);
  BOOL (*
HWPowerOn)(PVOID pHead);
  VOID (*
HWClearDTR)(PVOID pHead);
  VOID (*
HWSetDTR)(PVOID pHead);
  VOID (*
HWClearRTS)(PVOID pHead);
  VOID (*
HWSetRTS)(PVOID pHead);
  BOOL (*
HWEnableIR)(PVOID pHead, ULONG BaudRate);
  BOOL (*
HWDisableIR)(PVOID pHead);
  VOID (*
HWClearBreak)(PVOID pHead);
  VOID (*
HWSetBreak)(PVOID pHead);
  BOOL (*
HWXmitComChar)(PVOID pHead, UCHAR ComChar);
  ULONG (*
HWGetStatus)(PVOID pHead, LPCOMSTAT lpStat);
  VOID (*
HWReset)(PVOID pHead);
  VOID (*
HWGetModemStatus)(PVOID pHead, PULONG pModemStatus);
  VOID (*
HWGetCommProperties)(PVOID pHead, LPCOMMPROP pCommProp);
  VOID (*
HWPurgeComm)(PVOID pHead, DWORD fdwAction);
  BOOL (*
HWSetDCB)(PVOID pHead, LPDCB pDCB);
  BOOL (*
HWSetCommTimeouts)(PVOID pHead, LPCOMMTIMEOUTS lpCommTO);
  BOOL (*
HWIoctl)(PVOID pHead, DWORD dwCode,PBYTE pBufIn,DWORD dwLenIn, PBYTE pBufOut,DWORD dwLenOut,PDWORD pdwActualOut);
} HW_VTBL, *PHW_VTBL;

时间: 2024-09-10 07:43:55

__HW_VTBL 结构体神奇!的相关文章

<转> 求结构体偏移

原文出处忘记了... 此宏很神奇 #define FIND(structTest,e) (size_t)&(((structTest*)0)->e)   struct test { int a; int b; char c; int d; }; size_t s = FIND(test,a); cout<<s<<endl;  //输出结构体偏移

double类型结构体对齐的疑惑

问题描述 double类型结构体对齐的疑惑 32bit的cpu,在msvc中如果结构体有double类型,则以8字节对齐,例如 struct test { char ch; double j; }; ch也会占用8个字节,而32bit的cpu会一次性取到8个字节么?难道不是32bit,4个字节? 为什么要以8个字节来对齐呢?谢谢 解决方案 如果编译器为sse优化,那么是按照128bit,也就是8字节对齐的,如果编译器为sse2优化,那么是按照16字节对齐的.http://www.xuebuyua

Swift结构体与类

在面向过程的编程语言(如C语言)中,结构体用得比较多,但是面向对象之后,如在C++和Objective-C中,结构体已经很少使用了.这是因为结构体能够做的事情,类完全可以取而代之.而Swift语言却非常重视结构体,把结构体作为实现面向对象的重要手段.Swift中的结构体与C++和Objective-C中的结构体有很大的差别,C++和Objective-C中的结构体只能定义一组相关的成员变量,而Swift中的结构体不仅可以定义成员变量(属性),还可以定义成员方法.因此,我们可以把结构体看做是一种轻

C技巧:结构体参数转成不定参数

酷壳:http://coolshell.cn/articles/2801.html 下面这段程序是一个C语言的小技巧,其展示了如何把一个参数为结构体的函数转成一个可变参数的函数,其中用到了宏和内建宏"__VA_ARGS__",下面这段程序可以在GCC下正常编译通过: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h>    #define func(...) myfunc((struct

c语言-结构体对象使用malloc初始化时候有办法直接对结构体变量赋值吗

问题描述 结构体对象使用malloc初始化时候有办法直接对结构体变量赋值吗 结构体对象使用malloc初始化时候有办法直接对结构体变量赋值吗? 解决方案 如果是C++的结构体,可以在构造函数中赋值,比如 struct data { int a; data() { a = 1; } }; 解决方案二: 你动态分配了结构体变量无非是,后面的工作需要对它进行赋值,以及各种运算. 那么,你所说malloc初始化直接赋值.是指什么样的情况的,难道是像c++中的 (构造函数).事实上c++的构造函数在使用前

在C#里面调用带有回调函数和自定义结构体的DLL的例程

函数 开发环境: WinXP Pro(SP2英文版) + VS.NET 2003中文版接口库版本: CMPP2.0 API第二版(V2.6) 该例程演示了如何在C#里面调用VC6.0开发的带回调函数的API,而且回调函数的参数包含结构体,使用C#的委托和IntPtr方法实现. 由于我使用C#刚两天,这是我写的第一个C#程序,因此例程写的可能有点粗糙,但是编译和运行完全没有问题. CMPP2.0的API封装成了标准C调用的方法,提供以下三个接口,使用的时候只要有CMPPAPI.dll就可以了. #

Linux下的串口编程:struct termios结构体

termios结构体说明 termios结构体中,该结构体一般包括如下的成员: tcflag_t c_iflag; tcflag_t c_oflag; tcflag_t c_cflag; tcflag_t c_lflag; cc_t     c_cc[NCCS]; 其具体意义如下 c_iflag:输入模式标志,控制终端输入方式,具体参数如下所示. c_iflag参数表 键值说明 IGNBRK 忽略BREAK键输入 BRKINT 如果设置了IGNBRK,BREAK键的输入将被忽略,如果设置了BRK

关于C语言中的结构体对齐

(1)什么是字节对齐 一个变量占用 n 个字节,则该变量的起始地址必须能够被 n 整除,即: 存放起始地址 % n = 0, 对于结构体而言,这个 n 取其成员种的数据类型占空间的值最大的那个. (2)为什么要字节对齐 内存空间是按照字节来划分的,从理论上说对内存空间的访问可以从任何地址开始,但是在实际上不同架构的CPU为了提高访问内存的速度,就规定了对于某些类型的数据只能从特定的起始位置开始访问.这样就决定了各种数据类型只能按照相应的规则在内存空间中存放,而不能一个接一个的顺序排列. 举个例子

结构体数组的定义和引用(五)

2)指针法若p指向数组的某一个元素,则p++就指向其后续元素.3)指针的数组表示法若p=student,我们说指针p指向数组student,p[i]表示数组的第i个元素,其效果与student[i]等同.对数组成员的引用描述为:p[i].name.p[i].num等.[例7-4]指向结构体数组的指针变量的使用.structdata/*定义结构体类型*/{intday,month,year;};structstu/*定义结构体类型*/{char name[20];long num;struct d