问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用API编写的一个windows程序,可是出现错误信息,请问是哪里错了,怎么解决?

发布网友 发布时间:2022-05-20 22:11

我来回答

2个回答

热心网友 时间:2023-10-05 04:32

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
看到你的函数声明了吗,这个WndProc的P是大写的。

再看看你的函数定义:
LRESULT CALLBACK Wndproc(HWND hwnd,UINT message,WPARAM wParam,LPARAM IParam)
{
。。。。

Wndproc!是小写的!

把你的函数定义的p改为大写的WndProc问题就解决了。

具体想知道为什么有这个错误我们可以慢慢聊,不过如果如果你觉得这样就已经解释了你的疑惑的话就算了,呵呵。

另外,黄金叶说的这个问题也是存在的,用未正确初始化的结构体来调用函数很容易导致运行期的崩溃,不过相比他说的方法,我更推荐的方法是将结构体先初始化为零:
ZeroMemory(&wc,sizeof wc);

最后改成:
int WINAPI
WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR IpCmdLine,int nCmdShow)
{

WNDCLASS wc;
MSG msg;
HWND ghWnd = NULL;
ghInst = hInstance;
ZeroMemory(&wc,sizeof wc);
wc.style = CS_HREDRAW|CS_VREDRAW;

。。。。

windows中需要填的结构体太多了,而多数时候很多项里直接填零就可以了,所以我个人认为凡是用结构体,先用ZeroMemory函数来初始化为零会比较好。像是他说的lpszMenuName就属于这种填0就可以了的数据。

另外WinMain函数收到的 hPrevInstance这个数据在windows 3.1以后再也用不到了,可以利用C++的语法将它直接删去形参名,只留下参数类型。

热心网友 时间:2023-10-05 04:32

Win32API是涉及到很多类型和传递结构体参数的问题,注册窗口类的信息必须完整。
你只要在wc...这些代码后增加一个:
wc.lpszMenuName = NULL ;
就够了。

完整代码是:

#include<windows.h>
HINSTANCE ghInst = NULL;
char *szAppName = "SimpleAPI";
char *szAppTitle = "用API编制的一个简单的窗口";
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE, HINSTANCE,LPSTR,int);
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM IParam)
{
char * msgCreate = "收到WM_CREATE消息!";
char *msgCaption = "提示消息";
char *msgDestroy = "收到WM_DESTROY消息";
char *msgLBTN = "鼠标左键被按下";
switch(message)
{
case WM_CREATE:
MessageBox(GetFocus(),msgCreate,msgCaption,MB_OK|MB_ICONINFORMATION);
break;
case WM_LBUTTONDOWN:
MessageBeep(MB_ICONINFORMATION);
MessageBox(GetFocus(),msgDestroy,msgCaption,MB_OK|MB_ICONINFORMATION);
break;
case WM_DESTROY:
MessageBox(GetFocus(),msgDestroy,msgCaption,MB_OK|MB_ICONINFORMATION);
PostQuitMessage(0);
break;
default:return DefWindowProc(hwnd,message,wParam,IParam);
}
return FALSE;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR IpCmdLine,int nCmdShow)
{

WNDCLASS wc;
MSG msg;
HWND ghWnd = NULL;
ghInst = hInstance;
wc.style = CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszClassName = szAppName;
wc.lpszMenuName = NULL ;

RegisterClass(&wc);
ghWnd = CreateWindow(szAppName,szAppTitle,WS_OVERLAPPEDWINDOW,0,0,400,350,NULL,NULL,hInstance,NULL);
if(NULL == ghWnd)
return 0;
ShowWindow(ghWnd,nCmdShow);
UpdateWindow(ghWnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...频数和频率成正比,2频数一定时,频率与总次数成反比,对不对_百度... ...总次数之间的关系是( ) A.频数越大,频率越大 B.总次数一定时,频数越... 实验的总次数、频数及频率三者的关系是( )A.频数越大,频率越大B.频数... 嘎牙鱼的做法大全 安无线网要用多少元网费要交多少元不用用了要不要交网费,想寻求大家的... 无线网费1年多少钱 "Hbr"作为“港”的缩写,其在英语中的使用频率和应用示例如何? 【车主点评:吉利汽车帝豪GL 使我荣华富贵】 请问,如果,家用,自动挡,帝豪gl,英朗,科沃兹,卡罗拉,轩逸,同等价位,建议... ...景点?既能休闲的时候看看又能长点知识@@谢谢各位了! 网店管家的抓单软件API 出错,显示 信息错误:Invalid signature 怎么解决啊 求帮忙 淘宝客API获取数据遇到错误,错误提示是:系统级错误 : Insufficient ISV Permissions (开发者权限不足) 观察你最喜欢的一种植物。前后两次观察,相隔五天,写两篇观察笔记。(暑假作业上的题) 莫找借口失败,只找理由成功。是什么意思? 不为失败找理由,只为成功找方法是什么意思 “只为成功找方法、不为失败找借口”这句话是谁说的? 成功的人总会想办法,失败的人总会找借口 这句话如何理解 当老师把莫为失败找借口,多为成功找理由,表达了什么? 职场上,你会不会为自己的失败找借口? 我们是怎么给自己的失败找借口的? 总是为失败找借口 为什么人总为自己的错误找理由,给自己的失败找借口 为什么人只会为失败找借口,不会为成功找方法? 网络上做园林景观设计那个做的好 学习景观设计吧 景观设计有哪些好用网址 新人求助,玩cs go ping太高了怎么办 有什么好听的歌曲吗?我是00后,要安静一点哦! 哪些歌曲,适合00后们听? 有什么好听的歌曲?适合00后90后的 天猫物流同步接口api错误提示:B150是什么意思 高德地图的API一只报这个错误“Cannot read property &#39;addressComponent&#39; of undefined” 调用API函数的时候,怎么由返回的错误号,来得到windows的描述信息 女孩初中毕业 想去沈阳读技校 请问哪个技校比较好 学什么专业比较好 就是分配好些 沈阳北软信息职业技术学院里的什么专业最好? 你会怎么有效的提升英语听力? 怎样提升英语听力? 现在要上沈阳的技校 学什么专业比较好? 英语听力怎么提升? 技校都有什么专业(详细点)? 请教如何使用星云模拟器的宏 &quot;宏&quot; 是什么呀? 三国战记宏设定,高手来 nebula2.25模拟器宏设置 Nebula如何使用区域对战 模拟器,西游记,Winkawaks,NeoGeo 我有拳皇WinKawaks1.45模拟器现在想玩98但找了好多98的解压包放在ROMS里面模拟器搜索也找不到 该怎么办啊 拳皇97各个文件的作用 :faq.txt文本文档,ROMCHANGES.TXT文本文档,whatsnew.txt文本文档,winkawaks.ini 那个听说英雄联盟带打排位定级赛 多钱定级啊,lol有人代打排位的吗???? lol代练黄金5需要多少钱。