【问题标题】:How to compile Unsafe code in C#如何在 C# 中编译不安全代码
【发布时间】:2011-04-30 03:39:38
【问题描述】:

我已经导入了类似的 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

谁能帮我找到更好的解决方案。

提前致谢。

【问题讨论】:

    标签: c# winforms winapi


    【解决方案1】:

    右键单击项目。特性。建造。检查允许不安全代码

    【讨论】:

    • 没有。右键单击项目名称以打开它的菜单,因此您可以转到属性。
    • 哦。我认为工具栏中的菜单。无论哪种方式,我们都可以使用。对吗?
    • 在解决方案资源管理器中。抱歉,忘了说。
    【解决方案2】:

    只需从声明中删除 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 位操作系统上运行。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-11
        相关资源
        最近更新 更多