通过c#读取用c ++创建的共享内存结构

时间:2015-03-20 05:29:35

标签: c# struct mfc

我在MFC应用程序中创建了共享内存,我在c#中使用相同的共享内存。所以我想使用c ++中使用的相同结构。 但是当我在c#中声明结构时,它表明数组大小无法在可变声明中指定。  但我想在打开共享记忆时知道结构的大小。

在c ++应用程序中:

struct TagModalDB
{

float    IV        [600];                   //Mapped to SIMPACK  VAR_I
char     FAIL      [600];                   //Mapped to SIMPACK  MALF_I
char     FD        [600];                   //Mapped to SIMPACK  REM_I
float    NCP       [600];
float    NLH       [600];
float    NENTH     [600];
float    NKVAL     [30][600];
float    NLEVEL    [600];
.....
};   //Its very lengthy structure

CreateFileMapping( (HANDLE) 0xFFFFFFFF, (LPSECURITY_ATTRIBUTES) NULL, PAGE_READWRITE,  0, sizeof( struct TagModalDB ),"ModelDB" ); 

在C#应用程序中:

    struct TagModalDB
    {

    float    IV        [600];                   
    char     FAIL      [600];                   
    char     FD        [600];                   
    float    NCP       [600];
    float    NLH       [600];
    };

     mmf = MemoryMappedFile.CreateOrOpen("ModelDB", Sizeof(TagModelDB) );
 accessor = mmf.CreateViewAccessor(0, Sizeof(TagModelDB), MemoryMappedFileAccess.Read);

我如何在c#中声明struct。我是c#的新手。 在vs2008中开发的C ++应用程序。对于使用vs2010的c#应用程序。

1 个答案:

答案 0 :(得分:0)

这是C#结构的定义方式

  

为a定义默认(无参数)构造函数是错误的   结构。初始化一个实例字段也是一个错误   结构体。 您只能使用a来初始化struct成员   参数化构造函数或单独访问成员   在声明结构之后。任何私人或其他无法访问的   成员只能在构造函数中初始化。

您可以使用类似跟随的代码

using System;

public class Test
{
    public static void Main()
    {
        // make the instance
        TagModalDB test= new TagModalDB();

        // initialize the arrays
        test.intialize();

        Console.WriteLine(test.IV[599]); // <= Will out 0 since default assignment of 0  to numberic types
    }
}

// Your Struct 
public struct TagModalDB
{
    public float[]  IV;                   
    public char[]   FAI;                   
    public char[]   FD;                   
    public float[]  NCP;
    public float[]  NLH;


    // Here we initialize your arrays 
    public void intialize(){
        IV=new float[600] ;
        FAI= new char[600];
        FD= new char[600];
        NCP=new float[600];
        NLH= new float[600];
    }
}