gpt4 book ai didi

c# - 为什么要使用 C++ 的 .NET StructLayout 示例

转载 作者:行者123 更新时间:2023-11-28 04:00:53 25 4
gpt4 key购买 nike

来自 http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.structlayoutattribute(VS.71).aspx:

[C++] 

[StructLayout(LayoutKind::Explicit, Size=16, CharSet=CharSet::Ansi)]
__value class MySystemTime {
public:
[FieldOffset(0)] short int wYear;
[FieldOffset(2)] short int wMonth;
[FieldOffset(4)] short int wDayOfWeek;
[FieldOffset(6)] short int wDay;
[FieldOffset(8)] short int wHour;
[FieldOffset(10)] short int wMinute;
[FieldOffset(12)] short int wSecond;
[FieldOffset(14)] short int wMilliseconds;
};

这是我的想象,还是方括号中的元素与C++语法不一致?

当 C++ 提供了足够的工具来在语言的标准定义中指定结构布局时(也许还有通常支持的 #pragma pack() ),为什么还要费力地完成所有这些工作。设计到语言中的兼容性不能保证您可以在 C++ 中定义您可以在 C 中定义的任何结构吗?我理解需要能够用其他语言明确描述 C 结构的布局,但似乎没有必要使用提供的 C++

extern "C" { }

最佳答案

方括号中的东西称为属性,在C#代码中经常出现。它们在这里具有相同的含义,因为这不是严格的 C++。它具有 Microsoft 扩展以允许与 CLI 集成。

当您在 C 或 C++ 中声明这样的结构时,这并不能保证特定的内存布局。要控制它,您需要特殊的编译指示来控制“打包”。这些是特定于平台的。所以你在这里看到的只是 CLR 的等价物。

更新:该示例来自 Microsoft 的 C++ CLI 集成的旧版本文档,称为托管 C++。它很快就被放弃了,并在下一个版本中被 C++/CLI 取代了。 - 将 CLI 功能移植到 C++ 中,如此完整和广泛,它有效地成为一种不同的语言,就像 C++ 是一种不同于 C 的语言一样。

关于c# - 为什么要使用 C++ 的 .NET StructLayout 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/674155/

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