首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EnumResTypeProc空白LPTSTR参数

EnumResTypeProc空白LPTSTR参数
EN

Stack Overflow用户
提问于 2014-08-23 20:15:33
回答 1查看 165关注 0票数 0

我有下面的代码来枚举给定.exe中的所有资源文件

代码语言:javascript
复制
BOOL CALLBACK EnumResNameProc(HMODULE hModule, LPCTSTR lpszType, LPTSTR lpszName, LONG_PTR lParam);
BOOL CALLBACK EnumResTypeProc(HMODULE hModule, LPTSTR lpType, LONG_PTR lParam);

REMOTECONTROL_API BOOL EnumResources(LPCWSTR file1, LPCWSTR file2)
{
    HMODULE hFile = LoadLibrary(file1);

    BOOL bSuccess = EnumResourceTypes(hFile, EnumResTypeProc, NULL);

    FreeLibrary(hFile);

    return bSuccess;
}

BOOL CALLBACK EnumResNameProc(HMODULE hModule, LPCTSTR lpszType, LPTSTR lpszName, LONG_PTR lParam)
{
    return TRUE;
}

BOOL CALLBACK EnumResTypeProc(HMODULE hModule, LPTSTR lpType, LONG_PTR lParam)
{
    MessageBox(NULL, lpType, L"Type", 0);
    return TRUE;
}

但是,当调用EnumResTypeProc回调时,参数lpType是一个空字符串。

为什么会发生这种事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-23 23:12:19

如果你读了文档,上面写着:

lpszType in 类型: LPTSTR是枚举该类型的资源的类型。替代指针,这个参数可以是MAKEINTRESOURCE( ID ),其中ID是给定资源类型的整数标识符. ..。 如果IS_INTRESOURCE( lpszType )为真,则lpszType指定给定资源类型的整数标识符。否则,lpszType是指向以空结尾的字符串的指针。

这份文件还说:

注意,EnumResTypeProc中的EnumResTypeProc是,或者是资源ID,或者是指向字符串(包含资源ID或类型名称)的指针;EnumResNameProc和EnumResLangProc中的lpszType和lpszName是相似的。

这意味着回调的lpType参数并不总是指向字符串的指针,就像您假设的那样。有时,它是一个被类型转换为指针的数字。

试试这个:

代码语言:javascript
复制
BOOL CALLBACK EnumResTypeProc(HMODULE hModule, LPWSTR lpType, LONG_PTR lParam)
{
    WCHAR szMsg[256];

    if (IS_INTRESOURCE(lpType))
        StringCchPrintfW(szMsg, 256, L"Type: %u", (USHORT)lpType);
    else
        StringCchPrintfW(szMsg, 256, L"Type: %s", lpType);

    MessageBoxW(NULL, szMsg, L"Type", 0);

    return TRUE;
}

REMOTECONTROL_API BOOL EnumResources(LPCWSTR file1, LPCWSTR file2)
{
    BOOL bSuccess = FALSE;

    HMODULE hFile = LoadLibraryExW(file1, NULL, LOAD_LIBRARY_AS_DATAFILE);
    if (hFile != NULL)
    {
        bSuccess = EnumResourceTypesW(hFile, EnumResTypeProc, NULL);
        FreeLibrary(hFile);
    }

    return bSuccess;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25465970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档