Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Chương trình winapi gọi GDI+ không thành công

  1. #1
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    400

    Mặc định Chương trình winapi gọi GDI+ không thành công

    Dự án có 1 file duy nhất sau Gdiplus1.cpp
    C++ Code:
    1. #include <windows.h>
    2. #include <tchar.h>
    3. #include <gdiplus.h>
    4. #define wndclsname TEXT("Cuaso")
    5. #define wndtitle TEXT("Cua so")
    6. using namespace Gdiplus;
    7.  
    8. LRESULT CALLBACK MyWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
    9. void Draw(HWND hWnd);
    10. int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow)
    11. {
    12.     GdiplusStartupInput gdiplusStartupInput;
    13.     ULONG_PTR gdiplusToken;
    14.     GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    15.  
    16.     WNDCLASSEX wcex ={};
    17.     wcex.cbSize=sizeof(WNDCLASSEX);
    18.     wcex.lpszClassName=wndclsname;
    19.     wcex.lpfnWndProc=MyWndProc;
    20.     wcex.hInstance=hInstance;
    21.  
    22.     if(!RegisterClassEx(&wcex))
    23.     {
    24.         MessageBox(NULL, TEXT("Dang ky lop khong thanh cong"), TEXT("Dang ky lop"), NULL);
    25.         return 1;
    26.     }
    27.  
    28.  
    29.     HWND hWnd =CreateWindow(wndclsname,wndtitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,400,300,NULL, NULL, hInstance, NULL);
    30.     if(!hWnd)
    31.     {
    32.         MessageBox(NULL, TEXT("Tao cua so khong thanh cong"), TEXT("Tao cua so"), NULL);
    33.         return 1;
    34.     }
    35.     ShowWindow(hWnd, nCmdShow);
    36.     UpdateWindow(hWnd);
    37.  
    38.     MSG msg;
    39.     while(GetMessage(&msg, NULL, 0, 0))
    40.     {
    41.         TranslateMessage(&msg);
    42.         DispatchMessage(&msg);
    43.     }
    44.    
    45.     GdiplusShutdown(gdiplusToken);
    46.     return (int)msg.wParam;
    47. }
    48. LRESULT CALLBACK MyWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    49. {
    50.     switch(uMsg)
    51.     {
    52.     case WM_PAINT:
    53.         Draw(hWnd);
    54.         break;
    55.     case WM_DESTROY:  
    56.         PostQuitMessage(0);  
    57.         break;
    58.     default:  
    59.         return DefWindowProc(hWnd, uMsg, wParam, lParam);  
    60.         break;  
    61.     }  
    62.     return 0;
    63. }
    64. void Draw(HWND hWnd)
    65. {
    66.    
    67.     PAINTSTRUCT ps;
    68.     HDC hdc;
    69.     hdc=BeginPaint(hWnd, &ps);
    70.     Graphics g(hdc);
    71.     Pen pen(Color::Black, 1);
    72.     SolidBrush brush(Color::White);
    73.     Rect rect(10,10,300,200);
    74.     //rect.Inflate(2,2);
    75.     g.FillRectangle(&brush,rect);
    76.     g.DrawRectangle(&pen,rect);
    77.     EndPaint(hWnd,&ps);
    78. }
    khi chạy thì bị lỗi
    Code:
    1>------ Build started: Project: Gdiplus1, Configuration: Debug Win32 ------
    1>Build started 14/7/2017 10:17:20 Ch.
    1>InitializeBuildStatus:
    1>  Touching "Debug\Gdiplus1.unsuccessfulbuild".
    1>ClCompile:
    1>  Gdiplus1.cpp
    1>Gdiplus1.obj : error LNK2019: unresolved external symbol _GdipAlloc@4 referenced in function "public: static void * __cdecl Gdiplus::GdiplusBase::operator new(unsigned int)" (??2GdiplusBase@Gdiplus@@SAPAXI@Z)
    1>Gdiplus1.obj : error LNK2019: unresolved external symbol _GdipFree@4 referenced in function "public: static void __cdecl Gdiplus::GdiplusBase::operator delete(void *)" (??3GdiplusBase@Gdiplus@@SAXPAX@Z)
    1>Gdiplus1.obj : error LNK2019: unresolved external symbol _GdiplusStartup@12 referenced in function _WinMain@16
    1>Gdiplus1.obj : error LNK2019: unresolved external symbol _GdiplusShutdown@4 referenced in function _WinMain@16
    1>Gdiplus1.obj : error LNK2019: unresolved external symbol _GdipCloneBrush@8 referenced in function "public: virtual class Gdiplus::Brush * __thiscall Gdiplus::Brush::Clone(void)const " (?Clone@Brush@Gdiplus@@UBEPAV12@XZ)
    1>Gdiplus1.obj : error LNK2019: unresolved external symbol _GdipDeleteBrush@4 referenced in function "public: virtual __thiscall Gdiplus::Brush::~Brush(void)" (??1Brush@Gdiplus@@UAE@XZ)
    1>Gdiplus1.obj : error LNK2019: unresolved external symbol _GdipCreateSolidFill@8 referenced in function "public: __thiscall Gdiplus::SolidBrush::SolidBrush(class Gdiplus::Color const &)" (??0SolidBrush@Gdiplus@@QAE@ABVColor@1@@Z)
    1>Gdiplus1.obj : error LNK2019: unresolved external symbol _GdipCreatePen1@16 referenced in function "public: __thiscall Gdiplus::Pen::Pen(class Gdiplus::Color const &,float)" (??0Pen@Gdiplus@@QAE@ABVColor@1@M@Z)
    1>Gdiplus1.obj : error LNK2019: unresolved external symbol _GdipDeletePen@4 referenced in function "public: __thiscall Gdiplus::Pen::~Pen(void)" (??1Pen@Gdiplus@@QAE@XZ)
    1>Gdiplus1.obj : error LNK2019: unresolved external symbol _GdipCreateFromHDC@8 referenced in function "public: __thiscall Gdiplus::Graphics::Graphics(struct HDC__ *)" (??0Graphics@Gdiplus@@QAE@PAUHDC__@@@Z)
    1>Gdiplus1.obj : error LNK2019: unresolved external symbol _GdipDeleteGraphics@4 referenced in function "public: __thiscall Gdiplus::Graphics::~Graphics(void)" (??1Graphics@Gdiplus@@QAE@XZ)
    1>Gdiplus1.obj : error LNK2019: unresolved external symbol _GdipDrawRectangleI@24 referenced in function "public: enum Gdiplus::Status __thiscall Gdiplus::Graphics::DrawRectangle(class Gdiplus::Pen const *,int,int,int,int)" (?DrawRectangle@Graphics@Gdiplus@@QAE?AW4Status@2@PBVPen@2@HHHH@Z)
    1>Gdiplus1.obj : error LNK2019: unresolved external symbol _GdipFillRectangleI@24 referenced in function "public: enum Gdiplus::Status __thiscall Gdiplus::Graphics::FillRectangle(class Gdiplus::Brush const *,int,int,int,int)" (?FillRectangle@Graphics@Gdiplus@@QAE?AW4Status@2@PBVBrush@2@HHHH@Z)
    1>D:\Documents\Visual Studio 2012\Gdiplus1\Debug\Gdiplus1.exe : fatal error LNK1120: 13 unresolved externals
    1>
    1>Build FAILED.
    1>
    1>Time Elapsed 00:00:01.40
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    Mong các cao nhân chỉ giáo mình sai chỗ nào

  2. #2
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    865

    GDI+ có 3 thành phần cần có trong máy và khi lập trình:
    1. Gdiplus.h
    2. Gdiplus.lib
    3. Gdiplus.dll

    Trong mã nguồn bạn đã include thành phần đầu tiên và trong máy của bạn cũng đã tồn tại thành phần thứ 3.
    Thành phần thứ 2 cần phải có trong mã nguồn (hoặc cũng có thể cấu hình dự án để đưa nó vào) để trình liên kết làm việc. Thông thường thì IDE chỉ gộp sẵn vào trong dự án vài thư viện nhập cơ bản như : user32.lib, kelnel32.lib,... Gdiplus.lib không phải là thành phần được gộp mặc định, vì vậy chúng ta phải tự đưa vào.

    Bạn thêm 1 dòng vào sau khai báo header:
    Visual C++ Code:
    1. #include <windows.h>
    2. #include <tchar.h>
    3. #include <gdiplus.h>
    4. #pragma comment (lib, "Gdiplus.lib")    // Thêm dòng này : Khai báo thư viện nhập để phân giải các hàm Gdiplus
    5. #define wndclsname TEXT("Cuaso")
    6. #define wndtitle TEXT("Cua so")
    7. using namespace Gdiplus;

  3. #3
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    400

    Trích dẫn Nguyên bản được gửi bởi MHoang Xem bài viết
    GDI+ có 3 thành phần cần có trong máy và khi lập trình:
    1. Gdiplus.h
    2. Gdiplus.lib
    3. Gdiplus.dll

    Trong mã nguồn bạn đã include thành phần đầu tiên và trong máy của bạn cũng đã tồn tại thành phần thứ 3.
    Thành phần thứ 2 cần phải có trong mã nguồn (hoặc cũng có thể cấu hình dự án để đưa nó vào) để trình liên kết làm việc. Thông thường thì IDE chỉ gộp sẵn vào trong dự án vài thư viện nhập cơ bản như : user32.lib, kelnel32.lib,... Gdiplus.lib không phải là thành phần được gộp mặc định, vì vậy chúng ta phải tự đưa vào.

    Bạn thêm 1 dòng vào sau khai báo header:
    Visual C++ Code:
    1. #include <windows.h>
    2. #include <tchar.h>
    3. #include <gdiplus.h>
    4. #pragma comment (lib, "Gdiplus.lib")    // Thêm dòng này : Khai báo thư viện nhập để phân giải các hàm Gdiplus
    5. #define wndclsname TEXT("Cuaso")
    6. #define wndtitle TEXT("Cua so")
    7. using namespace Gdiplus;
    Chương trình chạy rồi
    cảm ơn bạn

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn