我在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#应用程序。
答案 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];
}
}