2008-10-24 7 views
4

Мне было интересно, если параметр проекта C# «Разрешить небезопасный код» применяется только к небезопасному C# -коду в самом проекте или необходимо установить этот параметр при связывании в родной C++ DLL? Как насчет ссылки в управляемой DLL, которая сама ссылается на родную DLL? Что этот вариант действительно делает, под капотом?Какова фактическая функция настройки проекта C# «Разрешить небезопасный код»

ответ

8

Это связанно с «небезопасным» ключевым словом в C#. «небезопасно» отключает все проверки, которые обычно происходят, и позволяет вам напрямую обращаться к памяти. он не ссылается на вызов собственных C++ DLL или интерфейсов.

5

Это позволяет использовать «небезопасный» блок.

unsafe(...) 
{ 
} 
3

Его необходимо использовать небезопасный {} контекст. Раньше требовалось использовать sizeof(), но в более поздних версиях это уже не так.

Вам не нужно, чтобы небезопасный код, если вы externing в другую DLL написано на другом языке, как C.

5

Это относится только к использованию блоков unsafe (где могут использоваться указатели). Он не управляет P/Invoke.