工控编程吧
标题: 上位机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中的资源了。
- //加载DLL
- HINSTANCE hModule = LoadLibrary(_T("test.dll"));
- if (hModule == NULL)
- {
- AfxMessageBox(_T("test.dll加载失败\n"));
- return;
- }
- //加载字符串资源
- CString strText = _T("");
- if (::LoadString(hModule, 1000, strText.GetBuffer(256), 256) != 0)
- {
- //设置标题
- SetWindowText(strText);
- }
- //加载图标资源
- HICON hIcon = ::LoadIcon(hModule, MAKEINTRESOURCE(1001));
- if (hIcon != NULL)
- {
- //设置图标
- SetIcon(hIcon, FALSE);
- }
- //加载位图资源
- HBITMAP hBitmap = LoadBitmap(hModule, MAKEINTRESOURCE(1002));
- if (hBitmap != NULL)
- {
- //设置位图
- CBitmap bmp;
- bmp.Attach(hBitmap);
- CRect rect;
- GetClientRect(rect);
- CDC* pDC = GetDC();
- CDC memDC;
- memDC.CreateCompatibleDC(pDC);
- memDC.SelectObject(&bmp);
- pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),
- &memDC, 0, 0, SRCCOPY);
- bmp.Detach();
- memDC.DeleteDC();
- }
- //释放DLL
- FreeLibrary(hModule);
复制代码
(, 下载次数: 1)