我在别人的DLL程序框架基础上继续开发,用到了自己的菜单资源,但发现在运行程序时居然不能识别我自己DLL中加入的资源ID,但我明明加入了下面的语句啊,请大家帮我看看,到底是什么原因,该怎么解决啊,困惑好几天了,快急死我了。HINSTANCE m_hinstold  =  AfxGetResourceHandle();  
AfxGetResourceHandle((HINSTANCE)AfxGetModuleInstance());
……
//这部分我产生了一个浮动窗口,在浮动窗口的OnInitDialog事件中生成了一个CTreeCtrlAfxSetResourceHandle(m_hinstold);但当我在后面的程序部分,完成选择Tree并点击鼠标产生菜单时报错
CMenu menu;
menu.LoadMenu(ID_MENU1);//调试发现执行完此句后,menu仍为空,说明没有找到ID_MENU1值并加载菜单。我跟踪使用的AfxGetResourceHandle这些语句,发现均有返回值,但好象并没有起到在DLL中找资源的功能,仍然是从EXE中找资源的。为什么会这样呢?另外,调试发现,只要是另外加菜单什么的,或自定义ID号的,均不能正确识别,为什么呢?我该怎么解决呢?我的工作都无法继续了,请大家快来帮帮我吧!

解决方案 »

  1.   

    我刚才发现我发的帖子有问题,但因为有人回过帖了,不能修改了,所以在这里纠正一下吧,免得浪费别人的时间帮我纠正:
    HINSTANCE m_hinstold = AfxGetResourceHandle();   
    AfxSetResourceHandle((HINSTANCE)AfxGetModuleInstance("这里我填写了本程序DLL的名字"));
    ……
    //这部分我产生了一个浮动窗口,在浮动窗口的OnInitDialog事件中生成了一个CTreeCtrlAfxSetResourceHandle(m_hinstold);
    另外,由于我是BCG产生的浮动窗体,所以上面所有我动态产生的命令类的ID全部是混乱的,但不知道为什么这个CTreeCtrl的ID居然能识别,难道也是混乱的?
      

  2.   

    对了,所有使用到的资源ID我都在resource.h中看过了,都存在的,而且文件里面所有的ID号都不重复的啊!
      

  3.   

    输出接口加 AFX_MANAGE_STATE(AfxGetStaticModuleState());了没?
      

  4.   


    输出接口是别人指定的,EXE也是别人的。我没有加,另外,我在网上看了这属于另外一种DLL导出资源的方式;
    我早上又根据看的林泉以前的帖子反复试了一下,可以了。发现必须在所有自己动态生成资源的地方都加发现得使用HMENU h=::LoadMenu(AfxGetModuleHandle(),资源ID);的形式,然后再使用menu定位的方式才可以加载成功。