c# - 将动态大小数组编码到结构中

标签 c# struct pinvoke marshalling

我如何定义具有动态大小数组的结构?

对吗?

struct MyStruc { 

    public int len; 
    [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)]
    public int buf[]; 
}

最佳答案

假设您想要一个包含指向数组的指针的结构。

将指向数组的指针声明为IntPtr并使用 Marshal.AllocHGlobal 手动编码数组内容, Marshal.Copy等等

假设您需要一个可变大小的结构,而不是包含指向数组的指针的结构。

您不能使用 p/invoke 编码可变大小的结构。您至少有以下两个选择:

  1. 将结构分成两个参数。
  2. Marshal.AllocHGlobal 手动编码结构, Marshal.Copy

关于c# - 将动态大小数组编码到结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22811701/

相关文章:

c - 在 c 中清零结构的内存区域

c# - 如果给定窗口句柄,我如何确定窗口句柄是否是 Windows UI 的一部分而不是应用程序?

c# - AnsiBStr SafeArray 上的 PInvoke

c# - web.config 中的条件位置授权?

c# - 为属性的属性添加功能

C# 在 PictureBox 中的某个点上绘制位图

python - 在 Cython 中返回一个结构数组

c# - 分配从 MSBuild 中的属性获取的参数值

c++ - 为什么不能在不创建节点作为指针的情况下创建链表?

c# - pinvoke c# : how can i map "const char **output"?