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

http://bbs.mjtd.com/thread-100917-1-1.html

我是使用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 " ;
6 9  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 时发生访问冲突。”
都快烦死了,因为问题显示不在我写的代码里面,而是后台代码,我是真心看不懂啊,向大家请教了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值