Я могу найти решение, когда я конвертирую тип переменной "msg" в строку, которая работает. но я не знаю, почему у этого есть проблемный тип объекта.
Небезопасный код не поддается проверке, таким образом, необходимо знать об этом. В Полной Доверительной среде это не грандиозное предприятие, но если у Вас есть другие среды, которые имеют более ограниченный набор полномочий, затем это могло бы повлиять на Вас там.
Можно поместить последствия в два блока.
Первое - то, как это влияет на Вашу среду приложения. Использование небезопасного кода требует той Вашей сборки быть выполненным в полной доверительной среде. Не возможно выполнить в ограниченной среде такой, поскольку бесспорный Нажимают настройки безопасности Once. Причем причина состоит в том, что небезопасный код препятствует тому, чтобы CLR гарантировал безопасность типов. Нажмите Once, хотя без ограничений безопасности не должен иметь проблемы.
Второе - то, что это означает для способа, которым Вы кодируете. Использование небезопасного кода обычно включает указатели использования и, в частности, с помощью них для выполненного усовершенствованного маршалинга через PInvoke. Нет ничего по сути неправильно ни с одним из этих действий все же. Просто требуется значительно больше понимания CLR и маршалинга, чем "безопасный" код. Объектное прикрепление является ярким примером знания, у Вас должно было бы быть твердое схватывание на том, прежде чем Вы начали использовать эти функции.
Добавить к ссылке Jared для возражения прикреплению...
При использовании указателей на память доступа непосредственно в C#, Вы уязвимы для CLR, перемещающего объект в памяти во времени выполнения. Это означает, что Ваш указатель может внезапно указать на неправильный раздел памяти. Фиксированное ключевое слово прикрепит объект в памяти так, чтобы этой проблемы можно было избежать.