0
点赞
收藏
分享

微信扫一扫

d符没有的偏移


​​原文​​

import core.sys.windows.setupapi;

void main() {
SP_DEVICE_INTERFACE_DETAIL_DATA_A DeviceInterfaceDetail;
uint Offset = DeviceInterfaceDetail.DevicePath.offsetof;
}

报错,​​char*​​​没有​​offsetof​​​属性.
​​​ldc​​​用​​-mtriple=x86_64-windows-msvc​​​编译.
返回​​​CHAR*​​​的方法,​​_DevicePath​​​为实际成员.
我猜它是​​​动态大小​​​结构,它不能直接映射到​​D​​​,因此这样.
"​​​成员​​​"很可能是C中的宏.​​D​​​没有宏,因此​​使用​​属性.不过,可改进错误消息.

不,实际上是最后带有​​CHAR[1]​​​成员的动态大小的结构,​​参考​​​.
就像​​​用C​​​一样,需要非常小心,并且不可能在栈上​​正常​​​分配或用作​​聚集​​​字段.
​​​DevicePath()​​​是返回"​​动态数组​​​"指针的​​方便​​​成员,(因为​​数组​​​也降级为​​C中​​​指针),因此无需​​.offsetof​​​手动​​计算​​​指针.
​​​动态数组​​​实际上是切片,​​betterC​​中允许它们.


举报

相关推荐

0 条评论