工控编程吧

标题: 上位机MFC 如何从DLL中获得资源 [打印本页]

作者: qq263946146    时间: 2019-8-13 10:44
标题: 上位机MFC 如何从DLL中获得资源
在创建动态工程后,可以像正常编辑动态库工程一样,向里面添加图标,位图,字符串资源。然后编译生成DLL文件。这样在此工程中的资源就可以被外部调用了。
我们打开resource.h头文件,可以看到资源ID的定义,
例如
#define IDS_STRING                      1000
#define IDI_ICON                        1001
#define IDB_BITMAP                      1002

可以看到我们添加的资源ID对应就是一些数字常量,我们可以在外部通过这些数字访问资源。
如下代码就可以访问DLL中的资源了。
  1. //加载DLL
  2.         HINSTANCE hModule = LoadLibrary(_T("test.dll"));
  3.         if (hModule == NULL)
  4.         {
  5.                 AfxMessageBox(_T("test.dll加载失败\n"));
  6.                 return;
  7.         }

  8.         //加载字符串资源
  9.         CString strText = _T("");
  10.         if (::LoadString(hModule, 1000, strText.GetBuffer(256), 256) != 0)
  11.         {
  12.                 //设置标题
  13.                 SetWindowText(strText);
  14.         }

  15.         //加载图标资源
  16.         HICON hIcon = ::LoadIcon(hModule, MAKEINTRESOURCE(1001));
  17.         if (hIcon != NULL)
  18.         {
  19.                 //设置图标
  20.                 SetIcon(hIcon, FALSE);
  21.         }

  22.         //加载位图资源
  23.         HBITMAP hBitmap = LoadBitmap(hModule, MAKEINTRESOURCE(1002));
  24.         if (hBitmap != NULL)
  25.         {
  26.                 //设置位图
  27.                 CBitmap bmp;
  28.                 bmp.Attach(hBitmap);
  29.                 CRect rect;
  30.                 GetClientRect(rect);
  31.                 CDC* pDC = GetDC();
  32.                 CDC memDC;
  33.                 memDC.CreateCompatibleDC(pDC);
  34.                 memDC.SelectObject(&bmp);
  35.                 pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),
  36.                         &memDC, 0, 0, SRCCOPY);
  37.                 bmp.Detach();
  38.                 memDC.DeleteDC();
  39.         }

  40.         //释放DLL
  41.         FreeLibrary(hModule);
复制代码
(, 下载次数: 1)