- 积分
- 1320
- 明经币
- 个
- 注册时间
- 2005-3-7
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
偶现在在工业实习中, 公司有一个用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++也不是非常熟悉,如果有高人做过类似的工作愿意指点,不胜感激!! |
|