d符没有的偏移

原创
2022/08/20 18:48
阅读数 93

原文

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中允许它们.

本文同步分享在 博客“fqbqrr”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部