2014-02-20 7 views
0

Привет, я пытаюсь использовать какой-то код в своем проекте, появление ошибки в синтаксисе, и я не знаю, что это такое. Ошибка возникает из тега, начинающегося с «небезопасно».Небезопасная ошибка в C#

Что небезопасно и где и зачем его использовать? TNX друзья ...

код находится здесь:

public Bitmap Cursor(ref int cursorX, ref int cursorY) 
     { 
      int screenWidth = 1; 
      int screenHeight = 1; 
      lock (_newBitmap) 
      { 
       try 
       { 
        screenWidth = _newBitmap.Width; 
        screenHeight = _newBitmap.Height; 
       } 
       catch (Exception) 
       { 
        ... 
       } 
      } 
      if (screenWidth == 1 && screenHeight == 1) 
      { 
       return null; 
      } 
      Bitmap img = CaptureScreen.CaptureCursor(ref cursorX, ref cursorY); 
      if (img != null && cursorX < screenWidth && cursorY < screenHeight) 
      { 
       int width = img.Width; 
       int height = img.Height; 

       BitmapData imgData = img.LockBits(
        new Rectangle(0, 0, width, height), 
        ImageLockMode.ReadOnly, img.PixelFormat); 

       const int numBytesPerPixel = 4; 

       int stride = imgData.Stride; 
       IntPtr scan0 = imgData.Scan0; 
       unsafe  // ERROR IN THIS LINE 
    // IF i move unsafe to method header (unsafe public ....) i get some another errors 
        { 
         byte* pByte = (byte*)(void*)scan0; 
         for (int h = 0; h < height; h++) 
         { 
          for (int w = 0; w < width; w++) 
          { 
           int offset = h * stride + w * numBytesPerPixel + 3; 
           if (*(pByte + offset) == 0) 
           { 
            *(pByte + offset) = 60; 
           } 
          } 
         } 
        } 
        img.UnlockBits(imgData); 

        return img; 
       } 
       return null; 
      } 
+1

И можете ли вы предоставить сообщение об ошибке? –

+6

с использованием 'unsafe', не зная, в чем его смысл звучит ... небезопасно ... – Jonesopolis

+2

Вы сомневаетесь. dont небезопасно включено, его переключатель компилятора: http://msdn.microsoft.com/en-us/library/chfa2zb8.aspx – iamkrillin

ответ

1

Я не знаю, как вы хотите использовать небезопасный код, но для этого кода вы должны сначала проверить «Разрешить небезопасно» в конфигурации сборки проекта.

2

http://msdn.microsoft.com/en-us/library/chfa2zb8.aspx

unsafe ключевое слово позволяет C# код для манипулирования указателями. Обратите внимание, что вы должны установить настройку проекта, чтобы компилятор мог скомпилировать небезопасный код; Я думаю, что это вариант /unsafe.

Ваш код управляет битовыми битами путем прямого доступа к растровому изображению в памяти. По моему опыту, это одно из наиболее распространенных применений unsafe в C#. Альтернативы с участием Bitmap.SetPixel намного, намного медленнее.

+0

это s правый. Спасибо Натан. – user3290286

1

небезопасный позволяет вам манипулировать необработанной памятью с помощью указателей. Чтобы скомпилировать небезопасный код, вы должны сообщить своему проекту, что небезопасный код разрешен. Щелкните правой кнопкой мыши по проекту и нажмите на сборку и установите флажок «Разрешить небезопасный код». Look for the checkbox.

+0

спасибо за повторение за помощь – user3290286

 Смежные вопросы

  • Нет связанных вопросов^_^