VS2019 EXE程序如何链接(使用)DLL动态库中的资源控件如DialogBox

本文详细讲解了静态库与动态库的区别,并重点介绍了如何在DLL中使用资源,包括如何正确设置和使用HMODULE来调用DLL中的资源控件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 上一节讲到如何使用lib静态库中的资源,这里顺便再提一下动态库中的资源。

动态库相对于静态库就要容易多了,静态库实际上相当于EXE自身的一部分,在编译完生成的文件中要完全融入EXE,而动态库有自己的结构,在最后生成可执行文件后,还是作为一个独立的个体存在。

所以,静态库的资源ID号与EXE中的ID资源号是不能重复的,否则会出问题;而动态库中的资源ID号则可以完全不用顾忌EXE中的ID号。

DLL中的资源控件用使用起来几乎和EXE的完全一致,唯一不同的是,你必须使用DLL库的HMODULE;这个HMODULE和EXE中的HINSTANCE其实是同一个等级的东西,例如,在DLL中调用DialogBox你必须这样,

HMODULE g_module = NULL;

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH: g_module = hModule;  break;
    case DLL_THREAD_ATTACH:  break;
    case DLL_THREAD_DETACH:  break;
    case DLL_PROCESS_DETACH: break;
        break;
    }
    return TRUE;
}

这里,我们设置了一个全局变量g_module ,把这个动态库的HMODULE保存下来,然后,在动态库的程序中就可以这样使用了,

DialogBox(g_module, MAKEINTRESOURCE(IDD_DIALOG_OPERATION), NULL, SpaceVisionProc);

如果进一步,你需要在EXE的源码中调用DLL中的资源,那么,同样的道理,你必须使用DLL的handle。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值