我调用的dll中的对话框不能用???

mo01 2002-06-15 08:24:35
我做了一个mfc扩展dll,在其中定义了一个派生于CDialog类的对话框,我在另一个程序中调用这个对话框类时,其他函数都好用,但我用这个对话框的DoModal()函数时,对话框并没有显示出来,这是什麽原因,是不是对话框资源没有加载进去???
...全文
89 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
masterdog 2002-06-18
  • 打赏
  • 举报
回复
我是让你在资源管理器中你的工程目录下改名。
mo01 2002-06-18
  • 打赏
  • 举报
回复
不好意思,这两天忙着准备英语四级了,也没空过来看各位的答复,我试了一下,右键中没有改名这一项,是不是在右键的properties中改,但如果是的话,vc会提示不让改名,怎麽办啊?
masterdog 2002-06-16
  • 打赏
  • 举报
回复
很久以前写的笔记,希望对你有帮助:

在《MFC开发Windows 95/NT应用程序》中指出:
  “一个扩展DLL只能与MFC采用动态联编方式链接并且只能被MFC应用程序
使用。扩展DLLs能自由地将MFC派生类对象发到调用程序中,同时也能自由地
从调用程序中接受MFC派生类对象。”
  从字面上理解,应用程序要想使用在扩展DLL中的类,必须对扩展DLL进行
动态联编。可是我采用静态联编,实现了该功能。具体步骤:
  
1.用AppWizard生成扩展DLLs:名为ExtDll.

2.选主菜单Insert/Resource/Dialog插入对话框:IDD_DIALOG1.

3.相应地用ClassWizard生成对话框类CDllDialog.

4.修改CDllDialog类声明:

class CDllDialog : public CDialog
改为
class AFX_EXT_CLASS CDllDialog : public CDialog

5.将resource.h改名为Dllres.h

6.在DllDialog.h中加入:
#include Dllres.h

7.编译生成ExtDll.dll和ExtDll.lib

8.用AppWizard生成应用程序RunExtDll,将ExtDll.dll、ExtDll.lib
DllDialog.h拷入应用程序工作目录,在主菜单Project/Settings/Link
的Object/library modules中加入extdll.lib。

9.在MainFrm.cpp中加入#include "DllDialog.h"(如下顺序)

#include "stdafx.h"
#include "RunExtDll.h"
#include "DllDialog.h"
#include "MainFrm.h"
10.在CMainFrame的响应函数中加入:

CDllDialog dlldlg;
dlldlg.DoModal();
至此,即可实现通过静态联编从扩展DLLS中输出Dialog类。

[讨论]
1.与从新定位资源不同,此方法可以将不同的资源/类装入不同的DLL中。
2.注意到两者资源定义可能重复:比如:

#define IDD_DIALOG1 129
请修改Dllres.h的相应定义。(本例不需要)
Tasehouny 2002-06-16
  • 打赏
  • 举报
回复
有时单靠这样是不行的,还要重载DoModal() 或者 Create()
mo01 2002-06-16
  • 打赏
  • 举报
回复
不好意思,怎麽将resource.h改名啊???
masterdog 2002-06-16
  • 打赏
  • 举报
回复
在工程文件目录下面有一个名叫resource.h的文件,右键选择改名即可,然后在VC的Tab:FileView中删除原先的resource.h(按“del”即可),再将改名后的文件(比如Dllres.h)加到工程中即可(同样右键选择Add Files to Folder)。呵呵!good luck
harry202 2002-06-15
  • 打赏
  • 举报
回复
AFX_MANAGE_STATE(AfxGetStaticModuleState());
在使用Dialog前加上上面的代码就可以了。原因是资源访问顺序造成的。
masterz 2002-06-15
  • 打赏
  • 举报
回复
add this line to your exported dll function
mo01 2002-06-15
  • 打赏
  • 举报
回复
这位高手能说的明白一些吗?小弟水平很次。
masterz 2002-06-15
  • 打赏
  • 举报
回复
In the DLL function that pops up the dialog you must manage the state so that the DLL code uses the DLL's resources.


extern __declspec(dllexport) void ShowEditDialog(int &MyData1, int &MyData2)
{
//ensure we are using our own resources
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyLocalDialog dlg;
dlg.Arg1 = MyData1; //specific local data for MyLocalDialog
dlg.Arg2 = MyData2;
dlg.DoModal();
MyData1 = dlg.Arg1; //data after processing
MyData2 = dlg.Arg2;
}

16,472

社区成员

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

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

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