有关DLL的使用

joinjoy 2000-08-22 10:28:00
我想在主程序里启动DLL,然后由DLL完成自身菜单的调入,相应的菜单项功能有对应的DLL中的函数。大致思路应该是什么?关键点是什么?谢谢。
...全文
150 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
joinjoy 2000-08-22
  • 打赏
  • 举报
回复
有启发!刚才问漏了一个了问题:MFC的APPWIZARD可以产生3中DLL,就我这种情况,应该用那一种呢?OK就给分。
playpcgame 2000-08-22
  • 打赏
  • 举报
回复
如果是在DLL链接库中载入DLL中定义的资源,必须完成资源句柄的切换,因为MFC中默认的资源句柄是主程序的句柄。
1.在DLL中调用 AfxGetStaticModuleState( )取得自身的资源句柄
2.利用AfxGetResourceHandle取得主程序的句柄
3.利用AfxSetResourceHandle切换主程序的句柄
4.使用DLL中的资源
5.切换主程序的资源句柄为原来的句柄
MarsSoft 2000-08-22
  • 打赏
  • 举报
回复
启动一个Dll文件有两种方式:
一是应用程序自动启动,这种方法是当你的程序使用到某个DLL文件里的函数功能时window自动加载DLL文件到内存中 二是在程序源代码中明确启动,使用LoadLibrary()API函数直接启动Dll文件.
Dll文件被启动后最先执行的函数是int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)(在C++ 里)
如果你的Dll文件是有菜单资源,则你可以通过Api函数LoadMenu()来加载资源中的菜单
对于Dll文件的终止,如果你是应用程序自动启动的话,它是windows自动终止的,即当没有程序再使用Dll文件里的功能函数等时(这时Dll文件的引用计数值为0),你不用自己终止;如果你是通过api函数LoadLibrary()来启动的话则要自己终止,使用api函数FreeLibrary()就行了。而对于Dll文件里的菜单资源释放则使用api函数DestroyMenu()来释放菜单资源
Holly 2000-08-22
  • 打赏
  • 举报
回复
1.两种方式:显式调用用LoadLibrary(),隐式调用在程序链接时给出DLL对应的Lib文件;
2.DLL入口函数中的DLL_ATTACH分支;
3.需要知道你是某个菜单项还是整个完整的菜单;
4.显式的调用需要在调用LoadLibrary的主程序中调用FreeLibrary,隐式的不需要处理;
如果是整个菜单,通常不需处理,如果是几个菜单项,需要自己删除,总之根据具体情况;
hyzx2000 2000-08-22
  • 打赏
  • 举报
回复
1、如何启动一个DLL
HINSTANCE hInstance=LoadLibrary( "????.dll" );
if(!hInstance)
return;
2、DLL被启动后最先执行的函数是什么
// 函数当然由你在dll中定义,比如 MyFunc(...)
typedef 返回类型 (*MYFUNC)( 参数表....);
MYFUNC MyFunc = GetProcAddress( hInstance, "函数名MyFunc" );
if(!MyFunc)
return;
MyFunc(....);
3、DLL定义好的菜单如何加载
HMENU hMenu = LoadMenu( hInstance, 菜单资源ID );
SetMenu( hWnd, hMenu );
4、DLL如何终止自己,卸载菜单
SetMenu( hWnd, NULL );
FreeLibrary( hInstance );
joinjoy 2000-08-22
  • 打赏
  • 举报
回复
我再把问题分解一下吧:
1、如何启动一个DLL
2、DLL被启动后最先执行的函数是什么
3、DLL定义好的菜单如何加载
4、DLL如何终止自己,卸载菜单
saiwai76 2000-08-22
  • 打赏
  • 举报
回复

you can use every one, but perhaps first one is simpler.
and you can insert menu staticly to your dll,so menu will auto loaded in.
Note:
dll also can include resource(menu, window,dialog,bitmap....).

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧