我已经导入了像
这样的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
任何人都可以帮助我找到更好的解决方案。
提前致谢。
答案 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)
如果有人需要,这是截图。