chenpool 发表于 2004-10-6 15:05:00

[ARX]如何在ARX或者COM中设置CAD的支持路径呢?

IAcadPreperties里有一个函数SETObjectarxPath


但是我不知道,怎么用,希望大家提点意见或者例子


VBA中很好设置,但是我在ARX中就是有问题,也不知道怎么回事

easypower 发表于 2004-10-6 16:09:00

ARX不能直接作


只能通过COM作


我对COM不了解,sorry

zfbj 发表于 2004-10-6 21:33:00

把你的代码贴出来看看。


我前两天在本版发布一个“使用VC通过OLE控制AutoCAD”的实例,你可以先参考一下。


另外,你是想做打包程序吧,我这两日也正在研究这方面内容,不过我是直接用InstallShield来做的,其实比VC还简单。等做完之后准备和大家共享一下。

chenpool 发表于 2004-10-6 21:51:00

确实,我是想做打包程序,但是没办法用COM实现,后来想了一个别的办法,尽管有点复杂,但是也是一种解决方法,我把代码贴出来,希望对大家有借鉴作用:



BOOL CFCCHApp::InitInstance()<BR>{<BR>        AfxEnableControlContainer();


        // Standard initialization<BR>        // If you are not using these features and wish to reduce the size<BR>        //       of your final executable, you should remove from the following<BR>        //       the specific initialization routines you do not need.<BR>        CString arxPath;<BR>        arxPath=this-&gt;m_pszHelpFilePath;       /*关键是这里,我找不出别的函数来得到EXE程序的路径,所以就用这个函数来得到帮助文件的路径,实际上,帮助文件没有,但是路径有用,所以,把帮助文件名减掉,就可以得到EXE文件的路径,这样的话,就可以不设置支持路径了*/<BR>        arxPath=arxPath.Left(arxPath.GetLength()-8);<BR>        IAcadApplication IAcadApp;<BR>//        IAcadPreferencesFiles IAcadPreFiles;<BR>        IAcadMenuGroup *pMenu;<BR>        BOOL bRet = IAcadApp.CreateDispatch(_T("AutoCAD.Application"));<BR>        if(bRet)<BR>        {<BR>                IAcadApp.SetVisible(TRUE);<BR>                IAcadApp.LoadArx(arxPath+"cugsetcadtitle.arx");<BR>                IAcadApp.LoadDVB(arxPath+"dvb\\XM_0000MenuSelect.dvb");<BR>                IAcadApp.LoadDVB(arxPath+"dvb\\FQ_0000MenuSelect.dvb");<BR>        }<BR>        else<BR>        {<BR>                AfxMessageBox("没有正确安装AutoCAD 2002,\r\n请核对后运行",MB_ICONERROR | MB_OK);<BR>                return FALSE;<BR>        }<BR><BR>        return FALSE;<BR>}


另外,我上面可以在CAD启动的时候自动加载ARX和VBA,但是我到现在也没找出来,如何利用COM来实现自动加载自定义的菜单,各位指点指点

easypower 发表于 2004-10-7 07:56:00

arxPath=this-&gt;m_pszHelpFilePath;       /*关键是这里,我找不出别的函数来得到EXE程序的路径,所以就用这个函数来得到帮助文件的路径,实际上,帮助文件没有,但是路径有用,所以,把帮助文件名减掉,就可以得到EXE文件的路径,这样的话,就可以不设置支持路径了*/


       


////////////////////////////////////////////////


上面你是要得到什么路径?


我原来是将安装路径写到註册表


同时安装的时候生成快捷方式,


在快捷方式中添加支持路径,


其它设置用profiles设置。。。。。。

chenpool 发表于 2004-10-7 11:53:00

写到注册表中有个问题:如果移动了文件夹后,程序就不正常了


我上面可以实现无论文件夹在哪里,都可以正常运行

王咣生 发表于 2004-10-7 13:45:00

回复

参考(COM):



// 读取Config.ini文件,配置AutoCAD<BR>void acadConfig()<BR>{<BR>        // 取得ARX模块路径<BR>        int len = GetModuleFileName(_hdllInstance, appFullPath, MAX_PATH);<BR>        CString appPath = appFullPath;<BR>        appPath = appPath.Left(appPath.ReverseFind('\\'));


        CString strConfFilePath = appPath + "<A href="file://config.ini/" target="_blank" >\\config.ini</A>";


        CFileFind finder;<BR>        if ( finder.FindFile(strConfFilePath, 0) == FALSE)<BR>                return;


        IAcadApplication * pAcad = NULL;<BR>        LPDISPATCH pDisp = NULL;


        if (!getApplication(&amp;pDisp))<BR>        {<BR>                pAcad-&gt;Release();<BR>                return;<BR>        }


        HRESULT hr = S_OK;


        hr = pDisp-&gt;QueryInterface(IID_IAcadApplication, (LPVOID*)&amp;pAcad);<BR>        if (FAILED(hr))<BR>                return;


        IAcadPreferences * pPrefs = NULL;<BR>        IAcadPreferencesFiles * pPrefsFiles = NULL;


        pAcad-&gt;get_Preferences(&amp;pPrefs);<BR>        pPrefs-&gt;get_Files(&amp;pPrefsFiles);


        BSTR bstrTemp;<BR>        pPrefsFiles-&gt;get_SupportPath(&amp;bstrTemp);


USES_CONVERSION;


        CComBSTR cbstrTemp = (CComBSTR) bstrTemp;<BR>        CString strSupportPath       = OLE2T(cbstrTemp);


        // 读取INI文件中的信息,配置AutoCAD


        // 添加支持路径<BR>        CString strBuf;<BR>        int count = 0;<BR>        count = GetPrivateProfileString("PATH", "path1", "NONE", strBuf.GetBuffer(MAX_PATH), MAX_PATH, strConfFilePath);


        strBuf.ReleaseBuffer();


        CString path1 = appPath + "\\" + strBuf;


        if (strSupportPath.Find(path1) == -1)<BR>        {<BR>                strSupportPath = path1 + ";" + strSupportPath;<BR>                bstrTemp = T2OLE(strSupportPath);<BR>                pPrefsFiles-&gt;put_SupportPath(bstrTemp);<BR>        }


        count = GetPrivateProfileString("PATH", "path2", "NONE", strBuf.GetBuffer(MAX_PATH), MAX_PATH, strConfFilePath);<BR>        strBuf.ReleaseBuffer();<BR>        CString path2 = appPath + "\\" + strBuf;<BR>        if (strSupportPath.Find(path2) == -1)<BR>        {<BR>                strSupportPath = path2 + ";" + strSupportPath;<BR>                bstrTemp = T2OLE(strSupportPath);<BR>                pPrefsFiles-&gt;put_SupportPath(bstrTemp);<BR>        }


        // 设置其它信息


        return;<BR>}


//*********************


pPrefsFiles-&gt;put_SupportPath(bstrTemp);


这段程序可以在 'ObjectARX工作日志' 中找到.

chenpool 发表于 2004-10-7 14:37:00

config.ini文件不在AutoCAD目录下可以吗?

王咣生 发表于 2004-10-7 14:43:00

回复

你完全不用考虑ini文件,看一看pPrefsFiles-&gt;put_SupportPath(bstrTemp);这里怎么添加路径就可以了.

chenpool 发表于 2004-10-7 16:02:00

我试试,有了结果告诉大伙



还有一个问题,希望王斑竹指点指点:CAD启动的时候如何自动加载自定义的菜单文件?我现在用的是acedCommand(),能够有别的方法?我看了你的程序日志,有这种方法,但我觉得比较杂,希望你能精练给个示例,谢谢了
页: [1] 2 3
查看完整版本: [ARX]如何在ARX或者COM中设置CAD的支持路径呢?