在 .NET 中使用带有[unsafe]
属性的指针时,必须使用例如/unsafe
选项将代码标记为不安全csc
。
但是当我使用 PInvoke 时会发生什么,对我来说,编译的程序集似乎将被视为安全的托管代码,而它可能包含潜在的安全问题,对吧?
注意:这既不好又好,因为它是一种使用快速指针操作而不必将程序集标记为/unsafe
.
例如
extern "C" __declspec(dllexport) void foo(double* samples)
{
*samples = 42.0;
}
调用者:
[DllImport("native.dll")]
static extern void foo(double[] samples);
或更明确地(这是默认编组):
[DllImport("native.dll")]
static extern void foo([MarshalAs(UnmanagedType.LPArray)] double[] samples);