Подтвердить что ты не робот

Что означает "не может быть маршалировано маршалером времени исполнения"?

Я получаю странные предупреждения из Visual Studio 2008 при компиляции приложения ASP.NET С#. Может ли кто-нибудь указать мне на объяснение (по словам нескольких слогов, если это возможно) того, что означает это предупреждение?

Как минимум один из аргументов для "IasHelper.Process" не может быть маршалированный маршалером времени исполнения. Таким образом, такие аргументы будут передается как указатель и может потребовать манипулирования небезопасным кодом.

4b9b3361

Ответ 1

Класс Marshal отвечает за преобразование неуправляемого кода/классов в управляемые классы и наоборот. См. документацию msdn для Маршал-класса.

Если вы включаете какую-либо сборку interop для доступа к COM-объекту, или такое может случиться, что маршал (l) er не может позаботиться о операции. Таким образом, у вас есть квази-неуправляемые части, запущенные в вашей программе, что, в свою очередь, может вызвать неприятные вещи, такие как переполнение буферов и т.д. Таким образом, вы покидаете безопасный, уютный мир управляемого кода и попадаете в черновое, опасное царство C/С++ и их страшных братьев.: -)

Ответ 2

Похоже, что вы ссылаетесь на объект ActiveX и даете tlbimp.exe сложное время, маршируя аргументы некоторых методов и членов структуры между COM и .NET.

это может произойти во время чистых сборок, так как только время tlbimp запускается. попробуйте сделать обычную сборку, где вы сначала не очистили.