用vs.net2002(vc7.0)开发ObjectARX2004应该注意的地方

用vs.net2002(vc7.0)开发ObjectARX2004应该注意的地方

1.
CODE:
Q为何用VC7开发ObjectARX2004程序总是出错?

请问哪位高手:

我以前用VC6在ObjectARX2000开发的程序一切正常,现在移植到Microsoft Visual Studio .NET 2003的VC7,使用ObjectARX2004,版本不兼容的地方都修改了,可是在编译连接时始终出错,例如提示:

无法解析的外部符号 "protected: virtual int __thiscall CAdUiBaseDialog::FindContextHelpFullPath(char const *,class ATL::CStringT > > &)" (?FindContextHelpFullPath@CAdUiBaseDialog@@MAEHPBDAAV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z)

请那位大哥指点一二,告诉用Visual Studio .NET 2003开发ObjectARX2004程序应注意的问题。


A:

CODE:
我建议你用ObjectARX/DBX/OMF Application Wizard for AutoCAD 2004,然后移植你原来的代码,需要改的要改。关于docs里的帮助,包括Object ARX2004于前面版本的区别,而使用ObjectARX/DBX/OMF Application Wizard for AutoCAD 2004你可以看ObjectARXLabs,这些都在Objarx的目录下有,而且也写的很具体和简单。然后调试你的程序,用CAD2004调试哦,你就会发现错在哪里了。

2.关于无法在编译环境中无法设置断点的解决方法.
Q:

CODE:
谁会配置vc7,arx for 2004环境?是在vc7中.我安装了ObjectARX DebugAttach Addin。但不能加断点。提示:‘acad.exe’does not

contain debugging information.(No symbols load),Chile OK to debug anyway.如果你知道的话,能不能给我说详细的配置?谢谢


A: CODE:
AUTOCAD2004软件许可证管理中含有防调试代码.(非美国/加拿大)
试一下以下过程:
1.单独启动AutoCAd
2.使用开发环境的"附加到进程"功能.使用"工具"中的"调试过程"来使用该功能.
另:在AutoCAd提供的ARx的 utils/debugAttach文件夹下有实用程序帮助实现.
A:我现在是这样调试的:::在菜单中Debug --> Start Without Debugging...启动AutoCAD2004(这样可以得到最新的ARX,当然,你也可以在外部启动)。然后Debug ---> Processes...打开Processes对话框,在Available Processes表中选中acad.exe Process,然后点击Attach...,弹出Attach to Process对话框,在Choose the program types that you want to debug:中在Native前打钩,点击OK后VC7就好了。最后就是在CAD 2004中运行你的arx程序,而在VC7中就会在你设的断点停下来可以调试了。 /



3.q

CODE:
error C2593: “operator +=”不明确
    c:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/atlmfc/include/cstringt.h(1075): 可能是“ATL::CStringT<BaseType,StringTraits> &ATL::CStringT<BaseType,StringTraits>:perator +=(wchar_t)”
    with
    [
        BaseType=char,
        StringTraits=StrTraitMFC_DLL<char>
    ]
    c:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/atlmfc/include/cstringt.h(1068): 或     “ATL::CStringT<BaseType,StringTraits> &ATL::CStringT<BaseType,StringTraits>:perator +=(unsigned char)”
    with
    [
        BaseType=char,
        StringTraits=StrTraitMFC_DLL<char>
    ]
    c:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/atlmfc/include/cstringt.h(1061): 或     “ATL::CStringT<BaseType,StringTraits> &ATL::CStringT<BaseType,StringTraits>:perator +=(char)”
    with
    [
        BaseType=char,
        StringTraits=StrTraitMFC_DLL<char>
    ]
    试图匹配参数列表“(CString, UINT)”时

回答: CODE:
把nChar强制类型转换一下 UINT nData;
//...
CString strData;
strData.Format("%d",nData);<!--/9team-->

4、
CODE:
在VC6下写的程序移植到VC7下,在VC7下编译,对于从CACUIDIALOG派生出来的对话框对下一段代码总提示出错
BEGIN_MESSAGE_MAP(CCreatProjDlg, CAcUiDialog)
//{{AFX_MSG_MAP(CCreatProjDlg) Needed for modeless dialog.
ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
ON_MESSAGE(WM_ACAD_KEEPFOCUS, OnAcadKeepFocus)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

错误提示如下:e:/2004/RutManager/CreatProjDlg.cpp(24): error C2440: “static_cast” : 无法从“LONG (__thiscall CCreatProjDlg::* )(UINT,UINT)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
实际上就是指OnAcadKeepFocus函数的参数和返回值不匹配,
OnAcadKeepFocus函数声明和实现如下
afx_msg LONG OnAcadKeepFocus(UINT, UINT);
LONG CCreatProjDlg::OnAcadKeepFocus(UINT, UINT)
{
return TRUE;
}
上面的代码都是以前在VC6中用ARX工具自动生成的,
有点莫名其妙,不知大家是否碰到过这个问题

回答:

CODE:


在VC++.NET中消息映射 ON_MESSAGE 对应的函数必须申明是LRESULT类型.
在相应的.h文件中修改申明:

将原声明
afx_msg LONG OnAcadKeepFocus(UINT,UINT);
改为
afx_msg LRESULT OnAcadKeepFocus(WPARAM wParam,LPARAM lParam);
而在相应的.cpp文件中修改相应函数:
LONG CCreatProjDlg::OnAcadKeepFocus(UINT, UINT)
{
return TRUE;
}


LRESULT CCreatProjDlg::OnAcadKeepFocus(WPARAM wParam,LPARAM lParam)
{
return TRUE;
}
红色的为改变的部分。

5、
CODE:
Q如何使AutoCAD2004自动加载要调试的ARX程序?
你可以在appload中把你的ARX家到自动启动那就可以了,在appload对话框的右下脚看到没有?点击后add就OK了,这你有一篇关于这个的详细讨论的帖子,你找找看,也许对你有帮助!

我要问的是像VC++6.0那样,编译通过后,自动启动AotuCAD2004时,自动加载所编译通过的ARX程序。

这和VC6一样的,在你编译完一个新的ARX后,它会提示你要启动什么程序,你选中autocad2004的acad.exe就可以了,当然,你还要和我上面说的一样,要先加载ARX(Contents ->Add)。

解决了,谢谢楼上的朋友。过去VC6.0能自动生成ACAD.RX文件,利用ACAD.RX文件可以自动加载,而VC++.net无法自动生成ACAD.RX文件。

你必须把你的工程中有个属性就是aucoca
d的路径设置对,右键点工程点属性,然后在里面找找看。/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值