pandoram 发表于 2005-3-7 18:02:00

求助: 将原有MFC程序转成ARX程序时无法调用对话框

偶现在在工业实习中, 公司有一个用MFC APP生成EXE+LISP+VB调用+DXF输入输出的软件想要转成用ARX调用,不改动下层界面。现在偶做了这些:


1)原本MFC App Wizard生成的App类不再继承WinApp,Message Map删除,对话框文件使用的App数据(extern C***App theApp) 保留,这样改过的App只是一个负责盛放global data的类。


2)用ARX Wizard创建MFC Extension DLL, 删除生成的.rc文件, \res文件夹和resource.h


3)在ARX任务中引入原本程序生成的.rc 和resource.h(直接指向原来软件使用的资源文件)和所有对话框的.cpp文件


4)ARX命令函数文件中调用extern C***App theApp, 然后运行theApp.InitInstance.


简单地说就是把App包装换成ARX包装,App本身的数据和函数构造没有换过。


问题:


代码可以compile,但运行ARX后不管有无resource override,对话框都不能创建,ACAD报告为unsupported operation。使用debugger看到对话框创建地址为0x000000(偶认为是因为pParent指定为NULL所以自动设置application window为pParent,但是原来的App已经不是window了)然后DoModal返回-1,无法创建对话框。


偶用CWnd::FromHandle(adsw_acadMainWnd())指定创建父框,debugger报告adsw_acadMainWnd()为错误表达。但是代码还是可以compile,进入对话框的constructor时看到pParent有合法地址(如果不用adsw_acadMainWnd(),此地址为无),一出constructor,对话框地址变成0x000000。


这个问题昨天是第一个对话框能正确显示,按了Next后面的几个不行(原本的App里,每一个对话框的OnBtnNext函数修改App的一个变量,App用一个while里面加switch检查此变量然后对相应的对话框呼叫DoModal),今天所有的对话框都不能显示了。


请问这是什么问题,是因为偶拿掉App引起的吗?还是和资源文件有关?


另外请问如果除了#include之外只允许修改C***App的源文件而不允许修改对话框的源文件,从EXE到ARX的转换是否可行?


小妹学CAD/ARX只有两个月,对API,MFC和VC++也不是非常熟悉,如果有高人做过类似的工作愿意指点,不胜感激!!

pandoram 发表于 2005-3-7 18:16:00

补充:偶的软件配置

AutoCAD R2000 / ObjectARX 2000 / VC++ 6.0


在Win32 Release和Win32 Debug下compile的ARX都出现不能创建对话框的问题。其余设置为Wizard自动。

pandoram 发表于 2005-3-10 13:42:00

问题解决了

是原来的MFC源文件坏掉了..汗一个.


偶做了两个demo用debugger看了一天, 发现所有的对话框都是从0x000000开始但都是好好的, 而且如果在原来的工程里面添加新对话框就可以完全没有问题地调用. 所以就索性去把原来的exe project打开compile一遍, 发现出来的exe就是坏掉的..估计是改App改得乱掉了..


于是从母版CD上把所有对话框的源文件重新抄出来一遍, 就一切正常了..


果然是菜啊啊啊!
页: [1]
查看完整版本: 求助: 将原有MFC程序转成ARX程序时无法调用对话框