Win32 自定义本地资源dll

时间:2023-02-07 00:30:15

前言

这里是记录我的经验,没啥技术含量的,小白这厢有礼了

为何需要将部分资源做成dll

最近在写一个服务框架,这个服务框架是给别人用于开发服务用的.开发人员使用服务的时候,需要使用一些认证用的授权文件,每个服务都需要有个授权文件.此时,不幸的是,我的框架里面也用到了一些授权文件,用来嵌入部分具体的系统服务.那么问题来了,如果韩梅梅使用我的框架,需要把我的授权文件拷走,配置一些路径然后才能进行她的后续工作,同样,如果李屁屁使用框架,他也需要做同样的工作.这将带来极大的不方便.加入我把所有的资源做成dll,那么将会省很多事情.
1.我使用什么授权文件,二次开发人员不需要关心
2.省去了很多配置工作
3.资源修改方便

如何做?

这个比较简单,网上资料一坨一坨的,简单的记录一下:

Win32 自定义本地资源dll
Win32 自定义本地资源dll
Win32 自定义本地资源dll
Win32 自定义本地资源dll
Win32 自定义本地资源dll
Win32 自定义本地资源dll
Win32 自定义本地资源dll

然后直接编译就行了.这里要注意resource.h里的名称记录一下,因为使用库的地方要用到这个里面的部分资源名称,这里的是:

#define IDR_TOKEN_V 101

~over

如何用?

直接上代码

const int IDR_TOKEN_V = 101; // 这里要和库保持一致,至少101要不能变
...
// 找到这个库
HINSTANCE hd=LoadLibrary(L"operKingRc.dll");
if( !hd )
{
cout<<"[*] operKingRc.dll 加载失败.."<<endl;
Sleep(10000);
exit(0);
}
// #define IDR_TOKEN_V
HRSRC hRes = FindResource(hd, MAKEINTRESOURCE(IDR_TOKEN_V), _T("TOKEN"));
DWORD len = SizeofResource(hd, hRes);
HGLOBAL hg = LoadResource(hd, hRes);
LPVOID lp = (LPSTR)LockResource(hg);
FILE* fp;
if( fp = fopen("token.v","w+") )
{
char* cp = (char *)lp;
for(int i = 0; i < len; i++)
{
fputc(*cp++,fp);
}
}
fclose(fp);
FreeResource(hg);
...

最后把dll拷贝到程序运行目录下,即可.

全文结束