2010-10-25 7 views
5

J'ai importé une fonction API commeComment compiler le code Unsafe en C#

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

lors de la compilation de son montrant une erreur comme

Unsafe code may only appear if compiling with /unsafe 

comment compiler avec /unsafe. J'utilise Microsoft Visual Studio 2008

quelqu'un peut m'aider avec une meilleure solution.

Merci d'avance.

Répondre

13

faites un clic droit sur le projet. Propriétés. construire. Cochez Autoriser le code non sécurisé

+0

son clic gauche ?? droite??? –

+0

no. faites un clic droit sur le nom du projet pour ouvrir son menu, vous pouvez donc aller aux propriétés. –

+0

oh. J'ai pensé au menu de la barre d'outils. De toute façon, nous pouvons utiliser. droite? –

3

Il vous suffit de supprimer le mot clé non sécurisé de la déclaration. Les fonctions API Windows de ce type ne sont pas dangereuses. Vous pouvez vous débarrasser si le maladroit void * (IntPtr en code managé) comme ceci:

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

Notez également que le premier argument est une poignée, un IntPtr, pas un Int32. Obligatoire pour que ce code fonctionne sur les systèmes d'exploitation 64 bits.

2

Voici la capture d'écran si quelqu'un a besoin.

UnsafeCodeImage

Questions connexes