谁能帮助我在vc++ mfc编程加载字符串表值



谁能帮助我加载值在一个STRINGTABLE在vc++编程?我使用的是MFC

您可以使用LoadString方法直接从字符串表中加载字符串,我一直使用它。

http://msdn.microsoft.com/en-us/library/ms647486 (v = vs.85) . aspx

CStringW myString;
myString.LoadString(RESOURCE_ID); //where RESOURCE_ID is the Stringtable 
                                  //entry ID

*编辑:感谢您的输入,这使答案更好!!

您可以在其中放置文本文件的自定义资源。在运行时,将该文本文件作为资源读取。

void GetResourceAsString(int nResourceID, CStringA &strResourceString)
{
    HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(nResourceID),  L"DATA");
    HGLOBAL hResHandle = LoadResource(NULL, hResource);
    // Resource is ANSII
    const char* lpData = static_cast<char*> ( LockResource(hResHandle) );    
    strResourceString.SetString(lpData, SizeofResource(NULL, hResource));
    FreeResource(hResource);
}

其中DATA为自定义资源类型,nResourceDATA资源类型下的资源id。当然,您可以选择其他的名称,而不是"DATA"。

通常为每个字符串定义一个常量,该常量包含在程序和资源文件中。然后将字符串资源放在可执行文件的.rsrc部分中,并且可以使用LoadString()通过命名该字符串的定义常量来检索字符串。

也许你想在运行时遍历可执行文件的所有字符串资源?您可以通过读取pe结构体中适当条目处的进程内存来实现这一点。您可以在pe结构中找到字符串表条目,如果您在"资源目录表"下找到http://msdn.microsoft.com/en-us/windows/hardware/gg463119.aspx,或者查看定义pe结构的winapi include-files

很难知道你到底在问什么,但我会试着回答你。这假定您询问的是如何将字符串放入资源中,而不是如何读取现有资源。

包含资源的.rc文件可以包含#include指令。您所要做的就是写出一个文本文件,其中包含您想要包含的字符串、STRINGTABLE、BEGIN和END指令以及每个字符串的ID。您还应该创建一个.h文件来定义每个id,并将其包含在.rc中。

最新更新