Выделение множества шорт: «Произошло несоответствие» - PullRequest
0 голосов
/ 19 мая 2010

У меня есть следующая структура C ++:

    typedef struct FormulaSyntax{
        WORD StructSize;
        short formulaSyntax [2];
    } FormulaSyntax;

У меня есть метод DLL, который использует экземпляр этой структуры. Вот что я попробовал на стороне C #:

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public struct FormulaSyntax {
        public short StructSize;
        public short[] formulaSyntax;
    }

    [DllImport(DLL_NAME, EntryPoint = "PEGetFormulaSyntax",
                    CharSet = CharSet.Unicode)]
    public static extern bool getFormulaSyntax(short reportID,
                     ref FormulaSyntax syntax);

    ...
    FormulaSyntax syntax = new FormulaSyntax();
    syntax.formulaSyntax = new short[2];
    syntax.StructSize = (short)Marshal.SizeOf(syntax);
    PrintEngine.getFormulaSyntax(context.oldApiID, ref syntax);

Это вылетает, давая мне сообщение

Mismatch has occurred between the runtime type of the array and the sub type recorded in the metadata.

Что я делаю не так?

1 Ответ

0 голосов
/ 19 мая 2010

Нашел ответ здесь : Вот как должна выглядеть моя структура C # - ей нужна строка MarshalAs. Это работает сейчас.

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public struct FormulaSyntax {
        public short StructSize;
        [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I4,
                                            SizeConst = 2)]
        public short[] formulaSyntax;
    }
...