Как я могу конвертировать пустой указатель на структуру в C #

У меня есть dll (C #), вызываемая сторонней системой.

Это системный вызов функции fnSys и передача в качестве параметра пустого указателя.
Теперь мне нужно наложить эту пустоту * на мою структуру.

Мой код:

    public struct Menu
{
public string str1;
public string str2;
}

public static unsafe int fnSys(void* value)
{
if (value!=null)
{
System.Windows.Forms.MessageBox.Show("msg");
}

return 1;
}

Теперь, когда сторонний системный вызов вызывает эту функцию, появляется окно сообщения, но я не могу понять, как мне преобразовать это значение в MenuItem.
Также я попробовал так:

Menu menu = (Menu)Marshal.PtrToStructure(value, typeof(Menu));

но это не работает.

Есть ли способы?

1

Решение

Я нашел решение:

[StructLayout(LayoutKind.Sequential, Pack = 1, Size=255, CharSet = CharSet.Ansi)]
public struct Menu
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
public string str1;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
public string str2;
}

public static unsafe int fnSys(Menu value)
{
if (value!=null)
{
System.Windows.Forms.MessageBox.Show("msg");
}

return 1;
}

Атрибут StructLayout позволяет нам контролировать поля данных в памяти.

Более подробно это ссылка на сайт

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]