明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4312|回复: 13

mfc通过com控制AutoCAD导出jpg文件

[复制链接]
发表于 2013-4-12 12:04:26 | 显示全部楼层 |阅读模式
本帖最后由 EdmondLiu 于 2013-4-14 16:26 编辑

我是使用mfc导入AutoCAD的类库来进行操作AutoCAD,需要打开一个文件,然后了利用再带的虚拟打印机打印出pdf文件。但是遇到很多中断,一直没能解决,希望得到各位的指导!先谢谢了!
1 CAcadApplication cadApp;
2 CAcadDocument cadDoc;
3 CAcadDocuments cadDocs;
4
5 CLSID  clsid;      
6 HRESULT h;   
7 CString  str;   
8 h = ::CLSIDFromProgID(L"AutoCAD.Application",&clsid);      
9 if(FAILED(h))   
10 {     
11   MessageBox("计算机没有安装AUTOCAD软件。", "警告", MB_OK|MB_ICONWARNING);     
12   return;   
13 }        
14 IUnknown *pUnknown=NULL;   
15 h = ::GetActiveObject(clsid,NULL,&pUnknown); //查找是否有AutoCad程序在运行   
16 if(FAILED(h))
17 {     
18   h = cadApp.CreateDispatch(clsid);      
19   if(FAILED(h))     
20   {        
21     MessageBox("AutoCAD程序打开失败,请检查你的程序是否安装好。", "警告");      
22     return;     
23    }      
24    MessageBox("恭喜你,AutoCAD程序打开成功", "成功提示");   
25 }
26 else
27 {     
28   try     
29   {      
30     h=pUnknown->QueryInterface(IID_IDispatch,(LPVOID *)&cadApp); //获得已经打开的AutoCAD程序
31    if(FAILED(h))
32        throw(_T("没有取得IDispatchPtr"));      
33      pUnknown->Release();
34      pUnknown=NULL;     
35    }   
36    catch(LPCTSTR lpErr)     
37    {      
38      MessageBox(lpErr, "警告", MB_ICONWARNING|MB_OK);      
39      return ;     
40     }     
41     MessageBox("AutoCAD程序已经打开。", "警告", MB_OKCANCEL);  
42 }
43     
44 cadDocs = cadApp.get_Documents(); //获得文档集
45 CComVariant t(true),f(false);
46 cadDocs.Open(LPCTSTR("D:\\circle.dwg"),f,t); //打开文档
47 cadDoc = cadApp.get_ActiveDocument(); //获得文档
48     
49 CAcadLayouts cadLayouts = cadDoc.get_Layouts(); //定义布局集
50 CAcadLayout cadLayout = cadLayouts.Add("jpglayout"); //添加一个布局
51 cadLayout = cadDoc.get_ActiveLayout(); //获得当前布局
52 CAcadPlotConfigurations cadConfigs; 定义打印配置集
53 VARIANT modelType ;
54 modelType.vt = VT_BOOL;
55 modelType.boolVal = true;
56 CAcadPlotConfiguration cadConfig = cadConfigs.Add("PublishToWeb JPG.pc3",modelType);//定义打印设置
57 cadConfig.put_PaperUnits(1);  //设置打印纸张度量单位
58 cadConfig.put_PlotWithPlotStyles(true); //定义打印风格
59 cadConfig.put_StyleSheet("acad.ctb");//打印颜色
60 cadConfig.put_ConfigName("PublishToWeb JPG.pc3"); //打印机名字
61 cadConfig.put_UseStandardScale(true); //打印比例
62 cadConfig.put_StandardScale(cadLayout.get_StandardScale());//打印缩放比例
63 cadConfig.put_PlotType(cadLayout.get_PlotType());
64 cadConfig.put_CenterPlot(true);
65 CAcadPlot cadPlot = cadDoc.get_Plot();;
66 VARIANT config ;
67 config.vt = VT_LPSTR;
68 config.pcVal = "PublishToWeb JPG.pc3";
69 cadPlot.PlotToFile("C:\\test.jpg",config);//输出目录
70     
71 cadApp.Quit();
72 cadConfig.ReleaseDispatch();
73 cadConfigs.ReleaseDispatch();
74 cadDoc.ReleaseDispatch();
75 cadDocs.ReleaseDispatch();

从设置打印纸张度量单位就开始有中断,注释点后,后面每一句都有中断,还都一样...
SCODE sc = m_lpDispatch->Invoke(dwDispID, IID_NULL, 0, wFlags,&dispparams, pvarResult, &excepInfo, &nArgErr);
都是这一句,“0x5B404A10 (mfc110d.dll) (autocadSave.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0xCCCCCCCC 时发生访问冲突。”
都快烦死了,因为问题显示不在我写的代码里面,而是后台代码,我是真心看不懂啊,向大家请教了!


发表于 2013-4-12 15:00:51 | 显示全部楼层
你的代码我们看不懂
发表于 2013-4-13 02:53:49 | 显示全部楼层
发表于 2013-4-13 02:53:49 | 显示全部楼层
 楼主| 发表于 2013-4-13 13:20:23 | 显示全部楼层
yanyanjun999 发表于 2013-4-12 15:00
你的代码我们看不懂

跟VBA差不多,我就是照着VBA改的,你哪里看不懂啊?
发表于 2013-4-16 01:12:19 | 显示全部楼层
发表于 2013-4-16 01:12:19 | 显示全部楼层
发表于 2013-4-16 20:35:04 | 显示全部楼层
以前用VB做过,ARX还真没试过,不过,你既然用了MFC为什么还要用COM的方式呢?
发表于 2013-4-18 01:56:32 | 显示全部楼层
发表于 2013-4-18 01:56:32 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-18 14:50 , Processed in 0.193975 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表