我如何用PInvoke中的另一个类封送一个类来使用它

时间:2015-03-11 14:02:34

标签: pinvoke marshalling

我想在C ++中编组一个结构,以便在C#中使用它。它包含嵌套类。当我调试时,我得到除嵌套类之外的数据。我是定制编组的新手,但如果有人可以帮助我如何开始,我会很高兴。我已阅读了很多文章,但他们都使用简单的示例行int并编组它们。自定义编组对我有很大的帮助,因为我有许多这样的结构要转换。

http://blogs.msdn.com/b/jaredpar/archive/2005/07/11/437584.aspx - 这个例子使用了int,我对我的第一个char * []

感到震惊

我的c ++结构:

struct device
{    
    char Name[32];
    char Port;
    int type;   
    double Extention;
    int Buttons[8];
    double Matrix[4][4];        
    unsigned char expand[24];
}

struct InitializationParameters
{           
    char *SATELLITE[8]; 
    double TOLERANCE;   
    BOOL AVERAGE_MODE;
    int Use_DRF;
    double BaseMatrix[4][4];        
    unsigned char expand[24];       
    Device MARKER[8];   
};

我的C#类看起来像这样:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class  InitilizationParameters
{
    [MarshalAs(UnmanagedType.ByValArray,SizeConst = 8)]
    public string[] SATELLITE=new string[8];

    public double TOLERANCE;

    [MarshalAs(UnmanagedType.Bool)]
    public bool AVERAGE_MODE;

    public int Use_DRF;

    [MarshalAs(UnmanagedType.ByValArray,SizeConst = 4 * 4)]
    public double[,] BaseMatrix=new double[4,4];       

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)]
    public byte[] expand=new byte[24];

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
    public Device[] MARKER=new Device[8];       
}

除了嵌套的类类型之外,当与P / Invoke一起使用时,上面的编组为我提供了C ++方法中的所有数据。上述课程也是同样编组的

0 个答案:

没有答案