我再把问题分解一下吧:
1、如何启动一个DLL
2、DLL被启动后最先执行的函数是什么
3、DLL定义好的菜单如何加载
4、DLL如何终止自己,卸载菜单
1、如何启动一个DLL
2、DLL被启动后最先执行的函数是什么
3、DLL定义好的菜单如何加载
4、DLL如何终止自己,卸载菜单
解决方案 »
- 指针的一个疑难问题,想了很多年没想明白
- 怎么做类似word 的 基于服务 的程序
- 定级菜单快捷键无效,alt+F一起按无效,先按ALT,放开ALT,再按F,菜单就能打开!先谢!
- 如果程序中不断得到的SOCKET没有调用closesocket,长时间会有什么不良后果?
- 困惑:一个多线程问题,通过for循环创建多个线程出现了奇怪的问题,各位见过没?
- [求助]一个IP编辑控件
- C运行库中有的函数前有下划线,是什么意思?
- 类模板的头文件引用问题
- 问个IE的问题
- HELP!! HELP!! 函数发生冲突!请高手指点迷津!!!
- 关于VC++和delphi的论战
- 美国一个教授在70年代为讲授操作系统而写了一个简易UNIX,后来它的学生们将它发展成一个完整的UNIX流派,请问中国的教授们,您们是如何教授您的学生的呢?
2.DLL入口函数中的DLL_ATTACH分支;
3.需要知道你是某个菜单项还是整个完整的菜单;
4.显式的调用需要在调用LoadLibrary的主程序中调用FreeLibrary,隐式的不需要处理;
如果是整个菜单,通常不需处理,如果是几个菜单项,需要自己删除,总之根据具体情况;
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 );
一是应用程序自动启动,这种方法是当你的程序使用到某个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()来释放菜单资源
1.在DLL中调用 AfxGetStaticModuleState( )取得自身的资源句柄
2.利用AfxGetResourceHandle取得主程序的句柄
3.利用AfxSetResourceHandle切换主程序的句柄
4.使用DLL中的资源
5.切换主程序的资源句柄为原来的句柄
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....).