读取在c++;由c# 我在MFC应用程序中创建共享内存,在C语言中使用相同的共享内存。因此,我想使用C++中使用的相同结构。 但当我在c#中声明结构时,它表明数组大小不能在变量声明中指定。 但我想知道在打开共享内存时结构的大小

读取在c++;由c# 我在MFC应用程序中创建共享内存,在C语言中使用相同的共享内存。因此,我想使用C++中使用的相同结构。 但当我在c#中声明结构时,它表明数组大小不能在变量声明中指定。 但我想知道在打开共享内存时结构的大小,c#,struct,mfc,C#,Struct,Mfc,在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 floa

在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。我是新来的。 在VS2008开发的C++应用程序。对于c#应用程序,im使用vs2010。

这就是如何定义
c#
Structs的

为对象定义默认(无参数)构造函数是错误的 结构。在应用程序中初始化实例字段也是错误的 结构体只能通过使用 参数化构造函数或通过单独访问成员 声明结构后。任何私人或其他无法访问的 只能在构造函数中初始化成员

您可以使用如下代码:

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];
    }
}
使用系统;
公开课考试
{
公共静态void Main()
{
//举例说明
TagModalDB测试=新TagModalDB();
//初始化数组
test.initialize();

Console.WriteLine(test.IV[599]);//当我使用initialize()初始化结构变量时,结构的大小返回为24.int size=Marshal.SizeOf(typeof(TagModalDB))正如你提到的,我也没有得到价值。但是当声明结构不安全时,我使用了公共固定声明。它返回正确的大小12000,并且IM得到值。@ ANU数组是C类型中的引用类型。一个数组中的结构不包含数组元素-仅引用元素。C++结构与C语言有很大的不同。结构。关于C++的一件事是打包,就像在语法包中一样。你可能需要访问C++结构作为字节数组,并将每个数组(如IV)复制到相应的C数组。