如何在C#中编译不安全的代码

时间:2010-10-25 10:46:16

标签: c# winforms winapi

我已经导入了像

这样的API函数
[DllImport("gdi32.dll")]
private unsafe static extern bool SetDeviceGammaRamp(Int32 hdc, void* ramp);

编译时显示错误,如

Unsafe code may only appear if compiling with /unsafe

如何使用/unsafe进行编译。我正在使用Microsoft Visual Studio 2008

任何人都可以帮助我找到更好的解决方案。

提前致谢。

3 个答案:

答案 0 :(得分:13)

右键点击项目。属性。建立。检查允许不安全的代码

答案 1 :(得分:3)

只需从声明中删除 unsafe 关键字即可。像这样的Windows API函数并不安全。如果尴尬的void *(托管代码中的IntPtr)像这样,你可以摆脱:

    private struct RAMP {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
        public UInt16[] Red;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
        public UInt16[] Green;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
        public UInt16[] Blue;
    }

    [DllImport("gdi32.dll")]
    private static extern bool SetDeviceGammaRamp(IntPtr hDC, ref RAMP lpRamp);

另请注意,第一个参数是句柄,IntPtr,而不是Int32。需要使此代码在64位操作系统上运行。

答案 2 :(得分:2)

如果有人需要,这是截图。

UnsafeCodeImage