我在别人的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号的,均不能正确识别,为什么呢?我该怎么解决呢?我的工作都无法继续了,请大家快来帮帮我吧!
AfxGetResourceHandle((HINSTANCE)AfxGetModuleInstance());
……
//这部分我产生了一个浮动窗口,在浮动窗口的OnInitDialog事件中生成了一个CTreeCtrlAfxSetResourceHandle(m_hinstold);但当我在后面的程序部分,完成选择Tree并点击鼠标产生菜单时报错
CMenu menu;
menu.LoadMenu(ID_MENU1);//调试发现执行完此句后,menu仍为空,说明没有找到ID_MENU1值并加载菜单。我跟踪使用的AfxGetResourceHandle这些语句,发现均有返回值,但好象并没有起到在DLL中找资源的功能,仍然是从EXE中找资源的。为什么会这样呢?另外,调试发现,只要是另外加菜单什么的,或自定义ID号的,均不能正确识别,为什么呢?我该怎么解决呢?我的工作都无法继续了,请大家快来帮帮我吧!
HINSTANCE m_hinstold = AfxGetResourceHandle();
AfxSetResourceHandle((HINSTANCE)AfxGetModuleInstance("这里我填写了本程序DLL的名字"));
……
//这部分我产生了一个浮动窗口,在浮动窗口的OnInitDialog事件中生成了一个CTreeCtrlAfxSetResourceHandle(m_hinstold);
另外,由于我是BCG产生的浮动窗体,所以上面所有我动态产生的命令类的ID全部是混乱的,但不知道为什么这个CTreeCtrl的ID居然能识别,难道也是混乱的?
输出接口是别人指定的,EXE也是别人的。我没有加,另外,我在网上看了这属于另外一种DLL导出资源的方式;
我早上又根据看的林泉以前的帖子反复试了一下,可以了。发现必须在所有自己动态生成资源的地方都加发现得使用HMENU h=::LoadMenu(AfxGetModuleHandle(),资源ID);的形式,然后再使用menu定位的方式才可以加载成功。