如何编译C#不安全代码

问题描述:

在编译时其显示像如何编译C#不安全代码

Unsafe code may only appear if compiling with /unsafe 

错误如何与/unsafe编译我已经导入的API函数一样

[DllImport("gdi32.dll")] 
private unsafe static extern bool SetDeviceGammaRamp(Int32 hdc, void* ramp); 

。我正在使用Microsoft Visual Studio 2008

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

在此先感谢。

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

+0

其左键点击??对??? – 2010-10-25 10:58:25

+0

没有。右键点击项目名称打开它的菜单,所以你可以去属性。 – 2010-10-25 10:59:49

+0

哦。我想到了工具栏中的菜单。无论哪种方式,我们可以使用。对?解决方案资源管理器中的 – 2010-10-25 11:41:41

只需从声明中删除不安全的关键字。这样的Windows API函数不是不安全的。你可以摆脱如果尴尬无效*(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位操作系统上工作所必需的。

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

UnsafeCodeImage