Question

I was wondering if the C# project setting "Allow unsafe code" applies only to unsafe C# code in the project itself, or is it necessary to set this option when linking in a native C++ DLL? What about linking in a managed DLL that itself links to a native DLL? What does this option really do, under the hood?

Was it helpful?

Solution

It has to do with the "unsafe" keyword in C#. "unsafe" turns off all the checks that would normally happen and allow you to directly access the memory. it doesn't refer to calling native C++ DLL's or interfaces.

OTHER TIPS

It allows you to use the "unsafe" block.

unsafe(...)
{
}

This just relates to the use of unsafe blocks (where pointers can be used). It does not govern P/Invoke.

Its necessary to use the unsafe { } context. It used to be required to use sizeof() but in later versions that's no longer true.

You don't need to allow unsafe code if you are externing to another DLL written in another language like C.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top