c# - 如何为 C# 包装具有多种类型的 C++ 结构?

标签 c# c++ struct marshalling wrapper

我正在尝试根据头文件包装一组 C++ 函数和结构。到目前为止,我认为我了解包装每个结构背后的概念,但我不确定如何将其分开:

typedef struct
{
    BYTE    commCode;
    *other stuff*

    struct
    {
        DWORD   size;
        LPBYTE  payload;
    }
    Data;    
}
Set, *CommSet;

我应该这样做吗?:

[StructLayout(LayoutKind.Sequential)]
public class Set
{
    public byte commCode;

    public class DATA
    {
        public uint size;
        public byte[] payload;
    }
}

但此时我不确定如何解释另一种类型,*CommSet 指针。我需要一个单独的结构/类吗?

最佳答案

这只是声明 typedef struct 和指向它的指针的简写符号。参见 here .

在您的 PInvoke 绑定(bind)中,根据它的使用方式,您可以根据需要使用 Set 类型的 IntPtr 和编码结构,或使用 MarshalAs编码指向已知长度结构的指针。

关于c# - 如何为 C# 包装具有多种类型的 C++ 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41731331/

相关文章:

c++ - 为什么我的程序打印垃圾?

c++ - 给定一个字符串,我如何才能将另一个字符串中的唯一字符添加到它?

c++ - CString 到 std::cout

c - strcat 从结构中读取 csv 文件时出错

c# - 消息解析器 C#

c# - 设计 SOA WCF Web 服务时的最佳实践是什么?

c# - 根据参数使用不同依赖项时的依赖策略

C: "array type has incomplete element type"当使用不带 typedef 的结构数组时

c - 如何更改结构体中指针指向的值?

c# - 从 php 页面获取响应