2010-10-25 23 views
5

He importado una función API comocómo compilar código no seguro en C#

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

durante la compilación de su mostrando un error como

Unsafe code may only appear if compiling with /unsafe 

cómo compilar con /unsafe. Estoy usando Microsoft Visual Studio 2008

alguien me puede ayudar con una mejor solución.

Gracias de antemano.

Respuesta

13

haga clic derecho en el proyecto. propiedades. construir. comprobar permitir código inseguro

+0

es el clic izquierdo ?? ¿¿¿derecho??? –

+0

no. Haga clic derecho en el nombre del proyecto para abrir su menú, para que pueda ir a las propiedades. –

+0

oh. Pensé que el menú en la barra de herramientas. De cualquier manera, podemos usar. ¿derecho? –

3

Simplemente elimine la palabra clave insegura de la declaración. Las funciones de API de Windows como esta no son inseguras. Usted puede deshacerse si el vacío incómoda * (IntPtr en código administrado) así:

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); 

También tenga en cuenta que el primer argumento es un mango, un IntPtr, no un Int32. Se requiere para hacer que este código funcione en sistemas operativos de 64 bits.

2

Aquí está la captura de pantalla si alguien necesita.

UnsafeCodeImage