2012-01-13 5 views
0

Я использую этот код, чтобы поместить IplImage в pictureBox, прокомментированная часть не работает, поэтому I0m пытается с первыми тремя строками кода, а третий возвращает 3 ошибки во время компиляции:
1> UIThread.obj: ошибка LNK2028: неразрешенный жетон (0A00030D) "Экстерн "C" структура HDC__ * STDCALL GetDC (структура HWND *)" (GetDC @@ $$ J14YGPAUHDC_ @@ PAUHWND _ @@@ Z) ссылка в функции "private: void clrcall UIThread :: Form1 :: BtnAcquire_Click (класс System :: Object ^, class System :: EventArgs ^)" (? BtnAcquire_Click @ Form1 @ UIThread @@ $$ FA $ AAMXP $ AAVObject @ System @@ P $ AAVEventArgs @ 4 @@ Z) 1> UIThread.obj: ошибка LNK2019: неразрешенный внешний символ "exte р-н "C" структура HDC * STDCALL GetDC (структура HWND *) "ссылка в функции (GetDC @@ $$ J14YGPAUHDC_ @@ PAUHWND _ @@@ Z?)" частное: пустота __clrcall UIThread :: Form1: : BtnAcquire_Click (класс System :: Object ^, класс System :: EventArgs ^) "(? BtnAcquire_Click @ Form1 @ UIThread @@ $$ FA $ AAMXP $ AAVObject @ System @@ P $ AAVEventArgs @ 4 @@ Z) 1> C: \ Users \ Andrea Parola \ Documents \ Visual Studio 2008 \ Projects \ UIThread \ Debug \ UIThread.exe: фатальная ошибка LNK1120: 2 неразрешенных внешних файлаконвертировать HWND в визуальную студию HDC 2008 C++

так как мне преобразовать HWND в HDC?

  HANDLE handle = (HANDLE)this->PbBoxImg->Handle.ToInt32(); 
    HWND hWnd=*(HWND*)&handle; 
    HDC hdc = GetDC(hWnd); 
    //HDC hdc = picturebox.GetDC()->m_hDC; 
    char m_chBmpBuf[2048]; 
    BITMAPINFO *m_pBmpInfo =0; 
    m_pBmpInfo = (BITMAPINFO *)m_chBmpBuf; 
    m_pBmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 
    m_pBmpInfo->bmiHeader.biWidth = img->width; 
    m_pBmpInfo->bmiHeader.biHeight = -img->height; 
    m_pBmpInfo->bmiHeader.biBitCount= 24; 

    m_pBmpInfo->bmiHeader.biPlanes = 1; 
    m_pBmpInfo->bmiHeader.biCompression = BI_RGB; 
    m_pBmpInfo->bmiHeader.biSizeImage = 0; 
    m_pBmpInfo->bmiHeader.biXPelsPerMeter = 0; 
    m_pBmpInfo->bmiHeader.biYPelsPerMeter = 0; 
    m_pBmpInfo->bmiHeader.biClrUsed = 0; 
    m_pBmpInfo->bmiHeader.biClrImportant = 0; 
    StretchDIBits(hdc, 0, 0, img->width, img->height, 
         0, 0, img->width, img->height, 
         img->imageData, m_pBmpInfo, 
         DIB_RGB_COLORS, SRCCOPY); 

ответ

2

Щелкните правой кнопкой мыши проект, свойства, компоновщик, вход. Удалите $ (NoInherit) в настройке дополнительных зависимостей, чтобы связующему звену было предложено связать стандартные библиотеки импорта Windows. Включая user32.lib, тот, который предоставляет GetDC().

Примите это как подсказку о том, что вы пишете необычный код. Вы должны использовать System :: Drawing в приложении Winforms. StretchDIBits() покрывается Graphics :: DrawImage()

+0

все еще GetDC не распознается, даже если я включил user32.lib в свой проект. так как вы сказали, что это необычный код, у вас есть лучшее решение для преобразования IplImage в формат s, который может отображаться в окне изображения, без сохранения и перезагрузки? Спасибо – andrea