调试错误:找不到字符串资源 7176
Posted
技术标签:
【中文标题】调试错误:找不到字符串资源 7176【英文标题】:Debug Error: String Resource 7176 was not found 【发布时间】:2015-12-23 09:16:45 【问题描述】:我已将我的项目从 VC++.NET 2003 升级到 VS2010。我收到。我可以看到字符串表包含字符串资源 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
。
【参考方案1】:
您已在 TestResource.rh 中定义了 IDS_SHOWWARNING_TEST:
#define IDS_SHOWWARNING_TEST 7176
但是,在您的 TestResource.rc 中包含不同的头文件:
#include "DevControl.rh"
宏 IDS_SHOWWARNING_TEST 可能也在该文件中定义,具有不同的值。
【讨论】:
我已修改此代码以放在社交网站上,因为我不想显示实际代码,所以我错过了将“DevControl.rh”替换为 TestResource.rh。这只是一个例子。 我只能看到您发布的代码,而不是您计算机上的代码 :) 无论如何,错误清楚地表明您确实正确传递了字符串 ID(正如您所期望的那样,它是 7176,并且这就是错误消息中的内容)。这意味着具有该 ID 的字符串在所搜索的资源中为 NOT。您是否有多个资源模块(在 exe 和 dll 中)?您有多种语言资源吗?以上是关于调试错误:找不到字符串资源 7176的主要内容,如果未能解决你的问题,请参考以下文章
任务“:app:processDebugResources”的颤振执行失败。 AAPT:错误:找不到资源字符串/app_name