2011-07-30 141 views
0

我試圖讓這個屏幕截圖程序工作(下圖),它將屏幕圖像保存爲bmp文件,當我嘗試使用gcc編譯它時,出現以下錯誤:屏幕截圖程序編譯問題

/tmp/ccetmoRd.o:Screenshot.c:(.text+0x128):未定義參考[email protected]' /tmp/ccetmoRd.o:Screenshot.c:(.text+0x1e1): undefined reference to _GetDIBits @ 28' collect2:LD返回1退出狀態

任何想法,爲什麼這可能是?

非常感謝。

代碼:

#include <stdlib.h> 
#include <windows.h> 
#include <stdio.h> 

void TakeScreenShot(char* filename); 

int main() 
{ 
    TakeScreenShot("c:\\Screenshot.bmp"); 
    return 0; 
} 

// 
// Side Effects:N/A 
// 
//This code is copyrighted and has// limited warranties.Please see http:// 
// www.Planet-Source-Code.com/vb/scripts/Sh 
// owCode.asp?txtCodeId=10754&lngWId=3//for details.//************************************** 
// 

void TakeScreenShot(char* filename) 
{ 
    keybd_event(VK_SNAPSHOT, 0x45, KEYEVENTF_EXTENDEDKEY, 0); 
    keybd_event(VK_SNAPSHOT, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); 
    HBITMAP h;   

    OpenClipboard(NULL); 
    h = (HBITMAP)GetClipboardData(CF_BITMAP); 
    CloseClipboard(); 
    HDC hdc=NULL; 

    FILE*fp=NULL; 
    LPVOID pBuf=NULL; 
    BITMAPINFO bmpInfo; 
    BITMAPFILEHEADER bmpFileHeader; 

    do 
    { 
     hdc=GetDC(NULL); 
     ZeroMemory(&bmpInfo,sizeof(BITMAPINFO)); 
     bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); 
     GetDIBits(hdc,h,0,0,NULL,&bmpInfo,DIB_RGB_COLORS); 

     if(bmpInfo.bmiHeader.biSizeImage<=0) 
     bmpInfo.bmiHeader.biSizeImage=bmpInfo.bmiHeader.biWidth*abs(bmpInfo.bmiHeader.biHeight)*(bmpInfo.bmiHeader.biBitCount+7)/8; 
     if((pBuf = malloc(bmpInfo.bmiHeader.biSizeImage))==NULL) 
     { 
     MessageBox(NULL, "Unable to Allocate Bitmap Memory", "Error", MB_OK|MB_ICONERROR); 
     break; 
     } 
     bmpInfo.bmiHeader.biCompression=BI_RGB; 
     GetDIBits(hdc,h,0,bmpInfo.bmiHeader.biHeight,pBuf, &bmpInfo, DIB_RGB_COLORS); 

     if((fp = fopen(filename,"wb"))==NULL) 
     { 
     MessageBox(NULL, "Unable to Create Bitmap File", "Error", MB_OK|MB_ICONERROR); 
     break; 
     } 

     bmpFileHeader.bfReserved1=0; 
     bmpFileHeader.bfReserved2=0; 
    bmpFileHeader.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+bmpInfo.bmiHeader.biSizeImage; 
     bmpFileHeader.bfType='MB'; 
     bmpFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); 

     fwrite(&bmpFileHeader,sizeof(BITMAPFILEHEADER),1,fp); 
     fwrite(&bmpInfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp); 
     fwrite(pBuf,bmpInfo.bmiHeader.biSizeImage,1,fp); 
    } 
    while(0); 

    if(hdc) 
     ReleaseDC(NULL,hdc); 
    if(pBuf) 
     free(pBuf); 

    if(fp) 
     fclose(fp); 
} 
+4

你在Windows上編譯? –

+0

嘗試將'-lgdi32'傳遞給鏈接器? – jweyrich

+0

編譯使用的cygwin – Jeremy

回答

0

由於功能要求mark a comment as an answer繼續下降,我在這裏複製上面的解決方案。

已解決:下載的gdi32庫,它解決了問題。謝謝你的提示! - Jeremy