我想在获取字符串之前先查询字符串是否在字符串表中,因为某些项目可能不在字符串表中。为了清楚起见,该符号可能已声明或未声明,因此我不能仅指定字符串ID,因为它可能存在或可能不存在,并且如果不存在,将导致编译错误。
从控制台应用程序的基础上,我尝试了以下操作:
STRINGTABLE
BEGIN
IDS_APP_TITLE "ConsoleApplication4"
IDS_TEST_Home_HERE "Home here"
END
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by ConsoleApplication4.rc
//
#define IDS_APP_TITLE 103
#define IDS_TEST_Home_HERE 104
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(NULL);
if (hModule != NULL)
{
// initialize MFC and print and error on failure
if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: MFC initialization failed\n"));
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
}
}
else
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: GetModuleHandle failed\n"));
nRetCode = 1;
}
// vvvv My code below here vvvv:
HRSRC hResource = FindResource(hModule, _T("IDS_TEST_Home_HERE"), RT_STRING);
HGLOBAL hgString = LoadResource(hModule, hResource);
LPCTSTR string = (LPCTSTR)LockResource(hgString);
cout << string << endl;
// ^^^^ My code above here ^^^^
return nRetCode;
}
但是,该FindResource()
呼叫返回NULL
。我想念什么?
编辑:
对于感兴趣的任何人,我都写了一种从文件中读取id符号名称并将其转换为符号数值的方法,只要所读取的符号某种程度上是基于要查询的原始符号id即可。
这样做将使我可以查询其他符号的字符串资源值,可以从预定选项列表中进行选择。
您可以在下面查看解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句