关于undefined reference to `PlaySoundA@12',undefined reference to `GetStockObject@4'的解决办法

 此文章参考了其他作者的解决方法:

https://blog.csdn.net/hxl5955/article/details/55211054                     http://www.cnblogs.com/WinonaJia/p/7677030.html

当我运行下面代码的时候出现了两个错误1.undefined reference to `GetStockObject@4'

                                                              2:undefined reference to `PlaySoundA@12'

1:undefined reference to `GetStockObject@4'的解决办法

  右键工程->Properties->Build targets->Type:选择  GUI application 确定后重新编译即可。

或者  加上链接UI库:

右键工程->Properties->Build targets->Build options->Linker settings->Other linker options下加上-mwindows,确定,重新编译。

2:undefined reference to `PlaySoundA@12'的解决办法

project -> bulid options 点linker settings 再点add 添加winmm后ok即可。

此外,音乐格式必须为“.wav”,还要注意音乐文件的路径放在指定工程的文件夹下。

#include<windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
    static TCHAR szAppName[]=TEXT("HelloWin");
    HWND hwnd;
    MSG msg;//MSG消息结构
    WNDCLASS wndclass;//WNDCLASS窗口类结构
    wndclass.style=CS_HREDRAW|CS_VREDRAW;
    wndclass.lpfnWndProc=WndProc;
    wndclass.cbClsExtra=0;
    wndclass.cbWndExtra=0;
    wndclass.hInstance=hInstance;
    wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//LoadIcon函数:加载图标,以供程序使用
    wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//LoadCursor函数:加载鼠标光标,以供程序使用
    wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//GetStockObject函数:获取一个图形对象
    wndclass.lpszMenuName=NULL;
    wndclass.lpszClassName=szAppName;
    if(!RegisterClass(&wndclass))//RegisterClass函数:为应用程序的窗口注册一个窗口类
    {
        MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);// MessageBox函数:显示消息框
        return 0;
    }
    //CreateWindow函数:基于窗口类创建一个窗口
    hwnd=CreateWindow(szAppName,//窗口类名称
                      TEXT("The Hello Program"),//窗口标题
                      WS_OVERLAPPEDWINDOW,//窗口风格或窗口格式
                      CW_USEDEFAULT,//初始x坐标
                      CW_USEDEFAULT,//初始y坐标
                      CW_USEDEFAULT,//初始x方向尺寸
                      CW_USEDEFAULT,//初始y方向尺寸
                      NULL,//父窗口句柄
                      NULL,//窗口菜单句柄
                      hInstance,//程序实例句柄
                      NULL);//创建参数
    ShowWindow(hwnd,iCmdShow);//ShowWindow函数:在屏幕中显示窗口
    UpdateWindow(hwnd);//UpdateWindow函数:指示窗口对其自身进行重绘
    while(GetMessage(&msg,NULL,0,0))//从消息队列获取信息
    {
        TranslateMessage(&msg);//翻译一些键盘消息
        DispatchMessage(&msg);//将消息发送给窗口过程
    }
    return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    HDC hdc;//HDC设备环境句柄
    PAINTSTRUCT ps;//PAINTSTRUCT绘制结构
    RECT rect;//RECT矩形结构
    switch(message)
    {
    case WM_CREATE:
        PlaySound(TEXT("gamemusic.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);//播放声音文件
        return 0;
    case WM_PAINT:
        hdc=BeginPaint(hwnd,&ps);//标明窗口绘制文件
        GetClientRect(hwnd,&rect);//获取窗口客户区的尺寸
        DrawText(hdc,TEXT("Hello,Windows 98!"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);//显示一个文本字符串
        EndPaint(hwnd,&ps);//结束窗口绘制
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);//将“退出”消息插入消息队列
        return 0;
    }
    return DefWindowProc(hwnd,message,wParam,lParam);//执行默认的消息处理
}

时隔。。。。。。。。。。。。。。。。。。。。。。。。。。这么多天,我又重新开始看这本书《Windows编程(第五版)》,用VS2019写的时候,出现错误:

严重性    代码    说明    项目    文件    行    禁止显示状态
错误    LNK2019    无法解析的外部符号 _main,该符号在函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中被引用    Project1    C:\Users\dell\source\repos\Project1\MSVCRTD.lib(exe_main.obj)    1    

修改方法:右键project->属性->链接器->系统->子系统->改:窗口 (/SUBSYSTEM:WINDOWS)

 

 

 

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值