ObjectARX修改cad的支持文件路径

在cad插件的开发过程中,有时候需要用到一些文件,比如dll和资源文件(字体,图片等),由于它们不能像插件直接添加到cad中,也不好将它们放在cad的安装路径下,这时候就需要用到cad的支持文件路径,手动添加一般是比较稳妥的方式,还有就是通过代码修改。

通过代码修改一般有两种方法:

  • 如果是需求在不打开cad的条件下就可以修改,那只能使用修改注册表的方式。一般来说在路径
HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.1\ACAD-6001:804\Profiles\<<未命名配置>>\General\ACAD
//其值为字符型REG_SZ,下面是2008版本的自带支持路径:
//C:\Documents and Settings\Administrator\Application Data\Autodesk\AutoCAD 2008\R17.1\chs\support;
//C:\Program Files\AutoCAD 2008\support;
//C:\Program Files\AutoCAD 2008\fonts;
//C:\Program Files\AutoCAD 2008\help;
//C:\Program Files\AutoCAD 2008\Express;
//C:\Program Files\AutoCAD 2008\support\color;
  • 另一种情况就是用COM来实现
//根据项目加载的cad二次开发包的版本来import相应文件
#import "acax19ENU.tlb" no_implementation raw_interfaces_only named_guids
BOOL AddSupportPath(CStringArray &arPath)
{
    AutoCAD::IAcadPreferences *pPrefer = NULL;
    AutoCAD::IAcadPreferencesFiles *pPreferFiles = NULL;
    HRESULT hr = NOERROR;
    TRY
    {
        LPDISPATCH pAcadDisp =acedGetAcadWinApp()->GetIDispatch(TRUE);
        AutoCAD::IAcadApplication *pAcad = NULL;
        if (SUCCEEDED(pAcadDisp->QueryInterface(AutoCAD::IID_IAcadApplication,(void**)&pAcad)))
        {
            BSTR supportPath;
            hr = pAcad->get_Preferences(&pPrefer);
            hr = pPrefer->get_Files(&pPreferFiles);
            hr = pPreferFiles->get_SupportPath(&supportPath);
            CString stemp = supportPath;
            for (int i = 0; i< arPath.GetSize() ; i++)
            {
                CString ss = arPath.GetAt(i);
                stemp = stemp + ";" + ss;
            }
            supportPath = stemp.AllocSysString();//将CString 形转换成bstr
            pPreferFiles->put_SupportPath(supportPath);
            SysFreeString(supportPath); // 用完释放
        }
        pPrefer->Release();
        pPreferFiles->Release();
        pAcad->Release();
    }
    CATCH(COleDispatchException,e)
    {
        e->ReportError();
        e->Delete();
        return FALSE;
    }
    END_CATCH;
    return TRUE;
}
ObjetArx2004+VS2002前提:安装好以上两种软件创建步骤:1. 新建项目 Visual C++项目->选择ObjectARX/DBX/OMF->键入"Demo"项目名称 ->MFC Support中勾选Enxtension Dll->using MFC Shared DLL,其他取默认值2. 删除文件 在“解决方案资源管理器”中删除向导生成的acrxEntryPoint.cpp,DocData.cpp,DocData.h文件 同时可以在文件夹下彻底删除文件,后续步骤并不需要用到这3个文件3. 添加Demo.h文件 同时在Demo.h文件中加入代码 #pragma once #include"resource.h"3. 创建一个普通对话框,基于CDialog类,并生成类CDlgDemo4. 打开Demo.cpp文件,对这个文件要进行比较多的操作 ·注释掉"AFX_EXTENSION_MODULE DemoExtDLL ={ NULL, NULL };"这一句 ·添加#include "DlgDemo.h"头文件 ·添加函数DlgDemo(),具体见附件源文件代码 ·添加initApp(),unloadApp() ·注释掉DllMain中的"_hdllInstance =hInstance ;" ·在文件的末尾添加acrxEntryPoint() 这里需要提醒一下的是关于AC_IMPLEMENT_EXTENSION_MODULE(DemoDLL)的使用 涉及到了Dll资源的使用,所以DemoDLL在这里相当于一个连接AutoCAD和MFC的纽带, 保持整个Demo.cpp中,DemoDLL的一致5. 项目设置 菜单"工具"->"选项"->"项目"->"包含文件"->添加ObjectARX2004的inc目录 ->"库文件"->添加ObjectARX2004的lib目录6. 生成解决方案 一切pass,有2个警告rxapi.lib(libinit.obj) : warning LNK4099: 未发现 PDB“msvc.pdb” acedapi.lib(acedstub.obj) : warning LNK4099: 未发现 PDB“corehdr.pdb” 不用去管它,ObjectARX开发文档已经说明了这个问题的存在,不影响使用#至此为止,我们已经生成了MarkDemo.arx,在Debug目录下可以找到,下面将继续介绍如何在 AutoCAD2004菜单中自动加载Demo对话框
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值