Я тестирую простую концепцию, где у меня есть структура с именем ChatMessage
, которая содержит 2-байтовые массивы (длина сообщения 512 и длина имени пользователя 32) и DateTime
.Я передаю строковые аргументы в конструктор ChatMessage
и преобразовываю их в байтовые массивы, затем устанавливаю DateTime
.После того, как я создаю объект, я делаю это:
ChatMessage chat = new ChatMessage("Message", "Username");
IntPtr m = Marshal.AllocHGlobal(Marshal.SizeOf(chat));
Marshal.StructureToPtr(chat, m, true);
SendMessage(...);
Marshal.FreeHGlobal(m);
Похоже, это должно быть довольно просто.Создайте экземпляр структуры, поместите его в неуправляемую память и получите указатель.Я делаю это, чтобы я мог передать его другой программе с помощью сообщений Windows.проблема в том, что всякий раз, когда он попадает в строку StructureToPtr (), он генерирует исключение AccessViolationException, в котором говорится, что я «пытался читать или записывать защищенную память ...».Я не знаю, какого чёрта я делаю не так.Я знаю, что делал это раньше, но я просто не могу найти проект, в котором я это сделал.
Я просто хочу упорядочить структуру в неуправляемую память и передать указатель на нее другой программе, затемнаправить его в управляемую память и прочитать.Определение структуры существует в обоих проектах, так что это не проблема.