- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
[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/
考虑以下程序: using System.Runtime.InteropServices; using System; public class Program { public static
我注意到有很多地方我们有这样的东西: [StructLayout(LayoutKind.Sequential, Pack = 1)] public class E2H_LANEFIND_DAT
我正在摆弄从 C# 调用 DLL,并且发现需要定义我自己的结构。许多文章强制使用结构的顺序布局 [StructLayout(LayoutKind.Sequential)] struct Foo ...
我想从应用于以下结构的 StructLayout 中获取 22 字节的结构大小。 [StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi,
我正在尝试使用 SendInput 在我的应用程序中模拟键盘按下,并希望同时支持 32 位和 64 位。 我已经确定要使其工作,我需要有 2 个不同的 INPUT 结构 [Struct
我试图理解为什么下面的第二个例子没有问题,但第一个例子给了我下面的异常(exception)。在我看来,这两个例子都应该根据描述给出一个异常(exception)。谁能赐教一下? Unhandled
我在对数组正确使用 FieldOffset 时遇到了一些问题。下面的代码是一个示例,它对我来说无法正常工作: [StructLayout(LayoutKind.Explicit)] public st
我认为 LayoutKind.Sequential 和 LayoutKind.Explicit 很清楚,但是 C# 是如何处理 LayoutKind.Auto 的? 最佳答案 LayoutKind.A
在处理非托管代码时,我想更好地理解结构/类的映射。 我定义了以下结构: [StructLayout(LayoutKind.Sequential)] public struct Profil
我有: type Package = abstract member Date : int abstract member Save : unit -> unit [] type In
我注意到如果我用 StructLayout.Sequential 定义一个结构,就像这样: open System.Runtime.InteropServices [] type SomeType =
我有多个结构,它们都以 header 结构开头。像这样 public struct BaseProtocol { public Header header; public Footer
我卡在这个了。 我正在读取具有以下格式的二进制文件: Field name Size in bytes Example -----------------------------------
小测验:下面的程序打印了什么? using System; using System.Runtime.InteropServices; namespace ConsoleApplication2 {
来自 http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.structlayoutattribute(VS.7
我正在尝试使用 EnumDisplaySettings,它使用 DEVMODE 结构作为结果结构。 DEVMODE 结构在内部使用了一些联合,这使得它在 C# 中的使用稍微复杂一些。并集用于对显示器或
我想在 c# 结构类型中有一种 c 风格的 uion。 出于某种原因,每次分配我定义的类型时都会出现异常。这是我自己的类型。基本思想是我可以访问这个结构的“指针”。不幸的是我得到一个异常 TypeLo
我想做以下事情: [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct SomeStruct { publi
以 C# 结构体为例: [StructLayout(LayoutKind.Explicit)] public struct Example { [FieldOf
下面是一个完整的程序。只要您不取消注释顶部的“#define BROKEN”,它就可以正常工作。中断是由于 PInvoke 未能正确编码联合。所讨论的 INPUT_RECORD 结构有许多子结构,可以
我是一名优秀的程序员,十分优秀!