在winapi c项目中从专用dll加载图像资源

时间:2015-01-27 07:02:58

标签: c++ c winapi visual-studio-2012 dll

我正在开发vs2012中的win32 c ++项目。 我的项目使用了大量的资源,如图像,图标等。 我已将这些资源嵌入到exe中,这些资源是编译的。 我使用普通的visual studio资源文件完成了它。 编译项目需要花费很多时间。 而exe文件很笨重。

所以我决定把所有编译的资源都带到另一个dll文件中。 并在需要资源时提交它,然后卸载它。 我对该负载资源函数的算法就像......

HBITMAP LoadMyImage (INT nResId)
{
    HINSTANCE hDll = LoadLibrary (DLL_RESOURCE);
    if (hDll==NULL)
        return NULL;

    HBITMAP hBitmap = LoadImage (
        hDll, MAKEINTRESOURCE (nResId), IMAGE_BITMAP,
        LR_DEFAULTSIZE, LR_DEFAULTSIZE,
        LR_DEFAULTCOLOR);
    if (hBitmap==NULL)
        return NULL;

    FreeLibrary (hLib);
    return hBitmap;
}

这是考虑性能,惯例和复杂性的好方法吗? 请指教。

1 个答案:

答案 0 :(得分:0)

实质上,这是一种合理的方法。我认为应该改进一些细节:

  1. 请勿使用适用于带代码的库的LoadLibrary。使用LoadLibraryEx传递LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE | LOAD_LIBRARY_AS_IMAGE_RESOURCE
  2. 不要重复加载和卸载DLL。首次需要图像时加载一次。加载模块确实具有性能成本,您也可以只支付一次成本。