【问题标题】:GetProcAddress fails for LoadIconWithScaleDown on Windows 7Windows 7 上 LoadIconWithScaleDown 的 GetProcAddress 失败
【发布时间】:2012-12-01 10:13:53
【问题描述】:

我正在使用以下代码动态链接到LoadIconWithScaleDown API,以便我的代码能够在 Windows XP 上运行:

HRESULT (WINAPI *pfnLoadIconWithScaleDown)(HINSTANCE, PCWSTR, int, int, HICON *);

HMODULE hComCtrl32 = LoadLibrary(_T("Comctl32.dll"));
if(hComCtrl32)
{
    (FARPROC&)pfnLoadIconWithScaleDown = GetProcAddress(hComCtrl32, "LoadIconWithScaleDownW");
}

我在 Windows 7 上尝试此代码,但“pfnLoadIconWithScaleDown”始终为 NULL。为什么?

【问题讨论】:

  • 如果在 DLL 上运行 dumpbin /exports,符号是否存在?

标签: windows winapi windows-7 loadlibrary getprocaddress


【解决方案1】:

LoadIconWithScaleDown() 没有 ASCII (A) 和 UNICODE (W) 版本,因此将 GetProcAddress() 调用更改为:

pfnLoadIconWithScaleDown = GetProcAddress(hComCtrl32, "LoadIconWithScaleDown");

【讨论】:

  • 还需要正确的并行清单,以便加载正确版本的 comctl32.dll。
  • @HansPassant:您能否给我提供有关此并行清单的更多详细信息,因为我也得到了 hmjd 建议的 NULL...
  • comctl32 v6 清单。互联网上有数百万篇文章。无需在这里再做一遍。
  • @DavidHeffernan:好的,我意识到我做错了什么。我阅读了 LoadLibrary 安全说明,他们建议始终使用 dll 的完整路径,而不是仅仅执行 LoadLibrary(L"Comctl32.dll");因此,提供完整路径不适用于 comctrl32 清单要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 2018-09-10
  • 2012-01-16
  • 1970-01-01
  • 2014-11-10
  • 2015-03-30
  • 2012-09-16
相关资源
最近更新 更多