gpt4 book ai didi

c++ - 在结构中创建结构

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:31 27 4
gpt4 key购买 nike

我正在将一个在 Visual c++ 6.0 中创建的旧 C windows 驱动程序项目导入到 visual studio 2012 中。定义结构的方式导致 vs2012 中出现错误。

typedef struct {
LINK Link;
HANDLE hFile;
BYTE handleType;
OVERLAPPED Overlapped;
CRITICAL_SECTION csIoCtrl;
} USB_HANDLE, *PUSB_HANDLE;

typedef struct {
USB_HANDLE; //error occurs here saying nothing was declared for USB_HANDLE
LIST PipeList;
BOOL bRemoved;
CRITICAL_SECTION csPipeList;
SP_DEVICE_INTERFACE_DETAIL_DATA *InterfaceData;
} USB_DEVICE, *PUSB_DEVICE;

项目然后使用像这样的调用USB_DEVICE 我的设备;mydevice->hfile = handle;

这种结构在vs2012中可行吗?

(编辑 - 虽然这些确实显示为错误,但 visual studio 2012 确实编译并成功构建了一个解决方案。我将测试驱动程序以查看是否一切正常。)

错误:

struct declaration error message

member error message

我认为我可以使用的解决方法是制作 USB_DEVICE 结构:

typedef struct {
USB_HANDLE USB_HANDLE;
LIST PipeList;
BOOL bRemoved;
CRITICAL_SECTION csPipeList;
SP_DEVICE_INTERFACE_DETAIL_DATA *InterfaceData;
} USB_DEVICE, *PUSB_DEVICE;

然后我可以进行其余的调用:我的设备->USB_HANDLE.hfile = handle;

这是等价的说法吗?

最佳答案

定义一个宏来声明USB_HANDLE,然后在两者中使用它。喜欢,

#define HANDLE_BODY                \
LINK Link; \
HANDLE hFile; \
BYTE handleType; \
OVERLAPPED Overlapped; \
CRITICAL_SECTION csIoCtrl;

typedef struct {
HANDLE_BODY
} USB_HANDLE, *PUSB_HANDLE;

typedef struct {
HANDLE_BODY
LIST PipeList;
BOOL bRemoved;
CRITICAL_SECTION csPipeList;
SP_DEVICE_INTERFACE_DETAIL_DATA *InterfaceData;
} USB_DEVICE, *PUSB_DEVICE;

如果你也需要,你可以创建一个union。否则,您可能需要一些特殊的非标准编译器选项。例如,许多编译器支持 transparent_union,这也可以解决您的问题。但是,我认为 Visual C++ 不支持这一点。但也许更了解这些产品的人可以提供帮助。

关于c++ - 在结构中创建结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15800703/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com