【发布时间】:2015-12-23 09:16:45
【问题描述】:
我已将我的项目从 VC++.NET 2003 升级到 VS2010。我收到调试错误:找不到字符串资源 7176。我可以看到字符串表包含字符串资源 7176 的字符串,但是当我调用 Custom_MessageBox() 时仍然显示错误,这在同一项目的其他模块中运行良好。
在TestResource.rh中
#define IDS_SHOWWARNING_TEST 7176
在TestResource.rc中
#include "DevControl.rh"
STRINGTABLE
BEGIN
IDS_SHOWWARNING_TEST "Test1"
END
在TestResource.cpp中
BOOL TestFunc(hParentWnd)
{
LPCTSTR myString = "Hello"
Custom_MessageBox( hParentWnd,
MAKEINTRESOURCE(IDS_SHOWWARNING_TEST),
MB_OK | MCC_INFORMATION );
}
如果我通过 myString 代替 MAKEINTRESOURCE(IDS_TEST),那么它可以完美运行。
请找到Custom_MessageBox() 的定义。如果我看到 pszText 的值,它会显示错误的指针。 MAKEINTRESOURCE 无法评估 IDS_SHOWWARNING_TEST。不知道是什么原因。
const int CUS_RETURN_ERROR = (int)0xFFFF;
int cdecl Custom_MessageBox( HWND hwndOwner, LPCTSTR pszText, UINT uStyle, ... )
{
// handle variable parms
va_list sVarArgs;
va_start(sVarArgs, uStyle);
if (!pszText)
return CUS_RETURN_ERROR;
CMDMsgDialog Dlg;
int nReturn = Dlg.MessageDialog(hwndOwner, pszText, uStyle, sVarArgs);
va_end(sVarArgs);
return nReturn;
}
【问题讨论】:
-
Custom_MessageBox 在做什么?它可以处理字符串资源吗?您的代码是否调用 AfxSetResourceHandle?字符串可以在InitInstance开头加载吗?
-
如果你调用
MessageBox而不是`Custom_MessageBox`会发生什么? -
你需要显示
Custom_MessageBox的源代码,因为那是失败的函数。 -
我已将“hParentWnd”替换为“AfxGetMainWnd()->GetSafeHwnd()”,现在它工作正常。不确定为什么?
-
@S.Shil 显示您如何称呼
TestFunc。
标签: visual-studio-2010 visual-c++ mfc