Использование sizeof управляемой структуры в C # - PullRequest
1 голос
/ 26 октября 2011

Я пытаюсь перенести код C ++ на C #.Код предназначен для регистрации класса окна, используя RegisterClassEx.

Код C ++ имеет объект WNDCLASSEX wcex.У объекта wcex есть свойство

wcex.cbSize = sizeof(WNDCLASSEX);

В C # я определил структуру как

    [StructLayout(LayoutKind.Sequential)]
    public struct WNDCLASSEX
    {
        public uint cbSize;
        public uint style;
        [MarshalAs(UnmanagedType.FunctionPtr)]
        public PlatformInvokeGDI32.WNDPROC lpfnWndProc;
        public int cbClsExtra;
        public int cbWndExtra;
        public IntPtr hInstance;
        public IntPtr hIcon;
        public IntPtr hCursor;
        public IntPtr hbrBackground;
        public string lpszMenuName;
        public string lpszClassName;
        public IntPtr hIconSm;
    }

Я попытался получить размер, используя

wcex.cbSize = (uint)sizeof(WNDCLASSEX);

Функция, содержащая эту позицию, объявлена ​​как

unsafe private void

Я надеялась, что unsafe сделает работу проверки.Тем не менее я получаю эту ошибку в IDE:

Cannot take the address of, get the size of, or declare a pointer to a managed type ('CaptureScreen.PlatformInvokeGDI32.WNDCLASSEX')

Могу ли я превратить структуру в неуправляемую структуру?Если так, то как?Есть ли способ использовать sizeof, не делая структуру неуправляемой?Есть ли .NET-версия sizeof, которая бы работала?

1 Ответ

8 голосов
/ 26 октября 2011

Вместо этого используйте Marshal.SizeOf.

...