很久没写代码,一天几行的代码:
typedef int ( *PFUN)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
void CTestProcessMonitorDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
//MessageBox(TEXT("Hello"), TEXT("Test"));
//typedef void (*pfv) ();
HMODULE hmod = ::LoadLibraryExW(TEXT("user32.dll"), NULL, 0);
if (hmod != NULL)
{
PFUN pFun= (PFUN)GetProcAddress(hmod, "MessageBoxW");
if (pFun != NULL)
{
pFun(m_hWnd, TEXT("Hello"), TEXT("Test"), MB_YESNO);
}

在长时间未编写代码后,遇到一个Run-Time Check Failure #0错误,提示ESP值在函数调用中保存不当。问题出在调用user32.dll中的MessageBoxW函数时,原始代码中函数指针定义缺少调用约定。通过将函数指针类型定义为使用 WINAPI 调用约定(__stdcall),即`typedef int (WINAPI *PFUN)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);`,解决了这个问题。疑问在于之前不指定调用约定也能正常工作,但现在却需要明确指定。"
121221581,11403581,山西河曲县智慧水务调度信息系统建设案例,"['智慧水务', '供水信息化', 'GIS应用', '远程监控', '数据管理']
最低0.47元/天 解锁文章
3866

被折叠的 条评论
为什么被折叠?



