[StructLayout(LayoutKind.Sequential,Pack=4)]
public struct ABC_QUERY
{
public bool bQueryGroup;
public byte bQueryGroup2;
public int ass;
public byte bAllSubAccount;
}
在C#中,Marshal.SizeOf(typeof(ABC_QUERY)) = 16字节,unsafe { sizeof() = 8字节};在VC中,= 12字节,不能互通
[StructLayout(LayoutKind.Sequential,Pack=4)]
public struct ABC_QUERY3
{
public byte bQueryGroup;
public byte bQueryGroup2;
public int ass;
public byte bAllSubAccount;
}Marshal.SizeOf(typeof(ABC_QUERY)) = 12字节
[StructLayout(LayoutKind.Sequential,Pack=4)]
public struct ABC_QUERY4
{
public bool bQueryGroup;
public bool bQueryGroup2;
public int ass;
public byte bAllSubAccount;
}
Marshal.SizeOf(typeof(ABC_QUERY)) = 16字节
怎么解决C++与C#的这个通信问题呢?各位帮忙哈

解决方案 »

  1.   

    网上很多P/Invoke的教程...自己去看一下...
      

  2.   

    网上的P/Invoke的教程,几本上没有复杂度,就这样的结构也没看到传的,我主要是用于socket通信中。
      

  3.   

    在结构中传两个挨着的,一个bool 和一个byte会出问题,分开就不会有问题,但这不是解决问题的根本,所以问问,有没有解决问题的根本方法!
      

  4.   

    struct ABC_QUERY
    {
    bool bQueryGroup;
    byte bQueryGroup2;
    int ass;
    byte bAllSubAccount;
    } struct ABC_QUERY3
    {
    byte bQueryGroup;
    byte bQueryGroup2;
    int ass;
    byte bAllSubAccount;
    }
    struct ABC_QUERY4
    {
    bool bQueryGroup;
    bool bQueryGroup2;
    int ass;
    byte bAllSubAccount;
    }
    VC定议,几个结构都是一样大的 ,4字节对齐
      

  5.   

    你可以在c#明确指明偏移试试
    [StructLayout(LayoutKind.Explicit,Size=12)]
    public struct ABC_QUERY3
    {
    [FieldOffset(0)]
    public byte bQueryGroup;
    [FieldOffset(1)]
    public byte bQueryGroup2;
    [FieldOffset(4)]
    public int ass;
    [FieldOffset(8)]
    public byte bAllSubAccount;
    }