• 5423阅读
  • 8回复

[提问]遇到一个问题 。。 不知道如何解决   谢谢 [复制链接]

上一主题 下一主题
离线humhook
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-06
qtcreator 编译时提示出错
就是一个GUI的hello world

错误:undefined reference to `GetStockObject@4'
错误:undefined reference to `PlaySoundW@12'

代码如下

  1. #include<windows.h>
  2. LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
  3. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  4.                     LPSTR szCmdLine, int iCmdShow)
  5. {
  6.     static TCHAR szAppName[] = TEXT ("HelloWin") ;
  7.     HWND   hwnd ;
  8.     MSG    msg ;
  9.     WNDCLASSW wndclass ;
  10.     wndclass.style        = CS_HREDRAW | CS_VREDRAW ;
  11.     wndclass.lpfnWndProc  = WndProc ;
  12.     wndclass.cbClsExtra   = 0 ;
  13.     wndclass.cbWndExtra   = 0 ;
  14.     wndclass.hInstance    = hInstance ;
  15.     wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION) ;
  16.     wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW) ;
  17.     wndclass.hbrBackground= (HBRUSH)::GetStockObject(WHITE_BRUSH) ;
  18.     wndclass.lpszMenuName = NULL ;
  19.     wndclass.lpszClassName= szAppName ;
  20.     if (!RegisterClass (&wndclass))
  21.     {
  22.         MessageBox (  NULL, TEXT ("This program requires Windows NT!"),
  23.                       szAppName, MB_ICONERROR) ;
  24.         return 0 ;
  25.     }
  26.     hwnd = CreateWindow( szAppName,      // window class name
  27.                          TEXT ("The Hello Program"),   // window caption
  28.                          WS_OVERLAPPEDWINDOW,  // window style
  29.                          CW_USEDEFAULT,// initial x position
  30.                          CW_USEDEFAULT,// initial y position
  31.                          CW_USEDEFAULT,// initial x size
  32.                          CW_USEDEFAULT,// initial y size
  33.                          NULL,                 // parent window handle
  34.                          NULL,            // window menu handle
  35.                          hInstance,   // program instance handle
  36.                          NULL) ;      // creation parameters
  37.     ShowWindow (hwnd, iCmdShow) ;
  38.     UpdateWindow (hwnd) ;
  39.     while (GetMessage (&msg, NULL, 0, 0))
  40.     {
  41.         TranslateMessage (&msg) ;
  42.         DispatchMessage (&msg) ;
  43.     }
  44.     return msg.wParam ;
  45. }
  46. LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  47. {
  48.     HDC                   hdc ;
  49.     PAINTSTRUCT ps ;
  50.     RECT          rect ;
  51.     switch (message)
  52.     {
  53.     case WM_CREATE:
  54.         ::PlaySoundW (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
  55.         return 0 ;
  56.     case   WM_PAINT:
  57.         hdc = BeginPaint (hwnd, &ps) ;
  58.         GetClientRect (hwnd, &rect) ;
  59.         DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
  60.                   DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
  61.         EndPaint (hwnd, &ps) ;
  62.         return 0 ;
  63.     case   WM_DESTROY:
  64.         PostQuitMessage (0) ;
  65.         return 0 ;
  66.     }
  67.     return DefWindowProc (hwnd, message, wParam, lParam) ;
  68. }

离线dbzhang800

只看该作者 1楼 发表于: 2011-05-06
用QtCreator写win32程序? 好吧,没问题,和其他一样,请确保指定了必要的 库。比如 Gdi32.lib 或 libGdi32.a
离线humhook
只看该作者 2楼 发表于: 2011-05-06
回 1楼(dbzhang800) 的帖子
请问你的意思是  加上类似如下的代码?
#pragma comment(lib, "gdi32.lib");
可惜我试过不管用


是不是需要在IDE里面设置什么?

谢谢
离线jdwx

只看该作者 3楼 发表于: 2011-05-06
你这个是纯windows程序,不是QT。要想编译这样的程序最好用VC。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线dbzhang800

只看该作者 4楼 发表于: 2011-05-06
Re:回 1楼(dbzhang800) 的帖子
引用第2楼humhook于2011-05-06 11:13发表的 回 1楼(dbzhang800) 的帖子 :
请问你的意思是  加上类似如下的代码?
#pragma comment(lib, "gdi32.lib");
可惜我试过不管用
.......

LIBS+= -lgdi32

题外:
如果你用的msvc,你的pragma应该可以起作用,mingw的话,就不行了
离线humhook
只看该作者 5楼 发表于: 2011-05-06
回 3楼(jdwx) 的帖子
呵呵   我发现QTcreator是我喜欢的类型   比较喜欢用它
离线humhook
只看该作者 6楼 发表于: 2011-05-06
回 4楼(dbzhang800) 的帖子
谢谢
可惜我不明白 你说的 LIBS+= -lgdi32
这是什么意思
刚学习得win32编程   呵呵  
离线dbzhang800

只看该作者 7楼 发表于: 2011-05-06
Re:回 4楼(dbzhang800) 的帖子
引用第6楼humhook于2011-05-06 11:32发表的 回 4楼(dbzhang800) 的帖子 :
谢谢
可惜我不明白 你说的 LIBS+= -lgdi32
这是什么意思
刚学习得win32编程   呵呵  

这个和win32关系不太,既然你用的QtCreator,那么qmake的manual你是必须要去看的。
离线humhook
只看该作者 8楼 发表于: 2011-05-06
回 7楼(dbzhang800) 的帖子
好的  多谢
快速回复
限100 字节
 
上一个 下一个