Какова фактическая функция параметра проекта С# Разрешить небезопасный код

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


person Brian Stewart    schedule 24.10.2008    source источник


Ответы (4)


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

person Nick Berardi    schedule 24.10.2008

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

unsafe(...)
{
}
person Maxime Rouiller    schedule 24.10.2008

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

person Jeff Yates    schedule 24.10.2008

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

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

person cfeduke    schedule 24.10.2008