0

私はC#の初心者で、2つのクラスがあります。最初のクラスにはパブリック構造体があり、2番目のクラスは構造体を宣言しようとしています。私は英語が苦手ですが、これはあなたが理解できるようにコードです:

ファーストクラス :

class PE
{
#region NT Headers

    [StructLayout(LayoutKind.Explicit)]
    public struct IMAGE_NT_HEADERS32
    {
        [FieldOffset(0)]
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public char[] Signature;

        [FieldOffset(4)]
        public IMAGE_FILE_HEADER FileHeader;

        [FieldOffset(24)]
        public IMAGE_OPTIONAL_HEADER32 OptionalHeader;
    }

    [StructLayout(LayoutKind.Explicit)]
    public struct IMAGE_NT_HEADERS64
    {
        [FieldOffset(0)]
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public char[] Signature;

        [FieldOffset(4)]
        public IMAGE_FILE_HEADER FileHeader;

        [FieldOffset(24)]
        public IMAGE_OPTIONAL_HEADER64 OptionalHeader;
    }
#endregion
}

セカンドクラス:

class Main
{
    struct NT_Header
    {
        Namespace.PE.IMAGE_NT_HEADERS32 INTSIGN = 
            new Namespace.PE.IMAGE_NT_HEADERS32(); //HERE IS THE ERROR!
    }
}

それは常にエラーを引き起こします...助けてくれてありがとう!

4

2 に答える 2

3

で行っているように、デフォルト値を構造体フィールドに割り当てることはできませんNT_Header。それは合法的なC#ではありません。これはコンパイルされます:

class Main
{
struct NT_Header
    {
        public Namespace.PE.IMAGE_NT_HEADERS32 INTSIGN;
    }
}
于 2012-12-22T02:59:09.040 に答える
-2

C#コンパイラでは、値型インスタンスフィールドのインライン初期化は許可されていません。ただし、フィールドを初期化する必要がある場合は、フィールドを「静的」としてマークする必要があります。

于 2013-07-14T17:51:27.200 に答える