【发布时间】:2016-02-05 12:21:32
【问题描述】:
我正在尝试在我的 C# 应用程序中使用 C++ 代码。创建了以下结构:
System.Runtime.InteropServices.StructLayout(
System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct My_FSet
{
public int Num;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst = 100)]
public uint[] Freqs;
}
我想在我的代码中像数组一样使用它,比如
My_FSet FSet = new My_FSet();
FSet.Freqs[0] = 1000;
FSet.Freqs[1] = 2500;
FSet.Freqs[3] = 3200;
但我得到一个错误:
MyApp.exe 中出现“System.NullReferenceException”类型的未处理异常
附加信息:对象引用未设置为对象的实例。
似乎数组没有正确初始化,但我不能在结构中这样做,那么我该如何解决这个问题?
【问题讨论】:
-
使用struct的构造函数初始化数组
-
@Ehsan Sajjad。你能扩展一下吗?
-
@Patrick Hoffman。我恭敬地不同于这是一个重复问题的概念。我知道空引用并且通常理解它们足以相处。然而,这里的问题是,数组是在我无法初始化它的结构中声明的。或者看起来是这样,因为我收到错误:当我尝试这样做时,不能在结构中包含实例字段初始化器:public uint[] Freqs = new uint[100];
-
您是打算将数组与结构的其余部分内联(使其长度为 (1+100) x 4 字节)还是将数组作为单独的对象,结构包含 int字段和指向数组的指针(因此只有 8 或 12 个字节长)? C# 仅支持后一种情况,而不会过度使用
unsafe。